다음과 같은 다양한 경고를 캡처하여 한 줄을 만들고 싶습니다.
여기에 다른 경고를 수집하는 데 사용하는 코드 스 니펫이 있으며 경고 패턴을 관찰 한 후 다른 줄에 대한 경고가 있으며 다음 줄 경고 부분을 한 줄에 결합하고 해시 참조를 할당하고 싶습니다.
#!/usr/bin/perl
use strict;
use warnings;
open(FH,"/home/goudar/Desktop/1.log") or die !$;
while(<FH>){
my $line = $_;
if($line =~ m/^Warning: (.*)$/){
my $date1 = `date`;
chomp($date1);
$subStepValues = {
Warning => $1,
Warning_timeStamp => $date1,
};
push @{$subsSteps->{'subStepValues'}}, $subStepValues;
}
}
close(FH);
파일
Warning: No clock-gating check is inferred for clock clk_12800
at pins i_osc/i_osc_top/i_clk_div/g817/S and i_osc/i_osc_top/i_clk_div/g817/A1 of cell i_osc/i_osc_top/i_clk_div/g817. (PTE-060)
Warning: Virtual clock 'clk_vir' cannot be made propagated. (UITE-316)
Warning: Virtual clock 'clk_ext' cannot be made propagated. (UITE-316)
Warning: Net i_obr/i_obr34/rec2 has been annotated with max resistance
using the set_resistance command. This takes precedence over
values from parasitics. (PARA-047)
Warning: Net i_obr/i_obr34/rec2 has been annotated with min resistance
using the set_resistance command. This takes precedence over
values from parasitics. (PARA-047)
코드에 아주 작은 추가가 필요합니다.
일치하는 것 이외의 유일한 가능성 /^Warning:/
은 정확히 원하는대로 다음 줄에서 계속되는 것입니다. 따라서 else
분기 를 추가 하고 그 안에 이전에 마지막으로 일치 한 ' 경고 '에 줄을 추가 할 수 있습니다 . 이것은 여러 줄도 처리하며, 모두 마지막 ' 경고 '에 차례로 추가됩니다. 따라서 다음을 수행해야합니다.
1) 마지막 일치 배열의 위치를 기억하십시오 ( ' 경고 ')
2) 카운터의 마지막 값을 사용하여 else
마지막 ' 경고 '에 줄을 추가하는를 추가하십시오 .
이것이 작동하려면 이제 chomp
라인에 있어야합니다 .
use strict;
use warnings;
open(FH,"/home/goudar/Desktop/1.log") or die !$;
my $subStepValues; # added missing declarations
my $subsSteps = { };
my $cnt = -1; # added
while (<FH>) {
chomp(my $line = $_); # added
if ($line =~ m/^Warning: (.*)$/) {
$cnt++; # added
my $date1 = `date`;
chomp($date1);
$subStepValues = {
Warning => $1,
Warning_timeStamp => $date1,
};
push @{ $subsSteps->{'subStepValues'} }, $subStepValues;
}
else { # added
$subsSteps->{'subStepValues'}->[$cnt]->{'Warning'} .= " $line";
}
}
close(FH);
foreach my $ss (@{$subsSteps->{'subStepValues'}}) { # added, print
foreach my $key (keys %{$ss}) {
print "$key => $ss->{$key}\n";
}
}
이것은 각 ' 경고 '에 속하는 모든 줄을 인쇄합니다 .
3 인수 open,, open my $fh, '<', $infile
그리고 while ($fh) { }
.
또는 전체 파일을 하나의 문자열로 읽고 (또는 배열로 읽고 결합하여) 새 줄을 제거 할 수 있습니다. 그런 다음 해당 문자열을 분할 Warning:
(첫 번째 요소, 빈 문자열 삭제)하거나 동일한 방식으로 일치하지만 전역 적으로 일치시킵니다 ( /g
수정 자).
이것은 각 요소가 모든 텍스트가에 속하는 문자열 인 배열을 형성합니다 /^Warning:/
. 그런 다음 해당 배열을 다시 전달하여 해당 타임 스탬프를 추가하고 데이터 구조에 모두 넣습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다