ログファイル内の特定の単語(現在の値=)の後に値を検索し、値を含む文字列を作成したいとします。Perl - ログファイルの値を検索し、文字列として格納/印刷します。
vcs_output.log:ログファイル
** Fault injection **
Count = 1533
0: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rcc_data_e[6]
0: Current value = x
1: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rs3_data_e[51]
1: Current value = x
2: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rs1_data_e[3]
2: Current value = 1
3: Path = cmp_top.iop.sparc0.exu.alu.shft_alu_shift_out_e[18]
3: Current value = 0
4: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rs3_data_e[17]
4: Current value = x
5: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rs1_data_e[43]
5: Current value = 0
6: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rcc_data_e[38]
6: Current value = x
7: Path = cmp_top.iop.sparc0.exu.alu.byp_alu_rs2_data_e_l[30]
7: Current value = 1
.
.
.
私は後に値を格納する場合は、 "現在の値="、その後、X、X、1,0、X、0、X、1。私は最終的にxx10x0x1のような文字列として保存/印刷します。私は1つのループ(あるいはループを使用していない)内の文字列を作るための方法があると思い
#!/usr/bin/perl
use strict;
use warnings;
##### Read input
open (my $input_fh, '<', 'vcs_output.log') or die $!;
chomp (my @input = <$input_fh>);
my $i=0;
my @arr;
while (@input) {
if (/Current value = /)
$arr[i]= $input; # put the matched value to array
}
}
## make a string from the array using an additional loop
close ($input_fh);
:
は、ここに私のコード code.plです。私にそれをさせるよう助言してください。どんな提案も感謝しています。
use strict;
use warnings;
my @arr;
open (my $input_fh, '<', 'vcs_output.log') or die $!;
while (<$input_fh>) {
if (/Current value = (.)/) {
push @arr, $1;
}
}
close ($input_fh);
print "@arr\n";
__END__
x x 1 0 x 0 x 1
私は以下の答えを受け入れました。ごめんなさい。私は投票しましたが、受け入れることを忘れています –