【发布时间】:2019-01-27 13:20:55
【问题描述】:
我有一个日志文件内容很多块/begin CHECK ... /end CHECK 如下所示:
/begin CHECK
Var_AAA
"Description AAA"
DATATYPE UBYTE
Max_Value 255.
ADDRESS 0xFF0011
/end CHECK
/begin CHECK
Var_BBB
"Description BBB"
DATATYPE UBYTE
Max_Value 255.
ADDRESS 0xFF0022
/end CHECK
...
我想提取变量名及其地址,然后像这样写入一个新文件
Name Address
Var_AAA => 0xFF0011
Var_BBB => 0xFF0022
我只是在考虑($start, $keyword, $end) 来检查每个块并仅在关键字之后提取数据
#!/usr/bin/perl
use strict;
use warnings;
my $input = 'input.log';
my $output = 'output.out';
my ( $start, $keyword, $end ) = ( '^\/begin CHECK\n\n', 'ADDRESS ', '\/end CHECK' );
my @block;
# open input file for reading
open( my $in, '<', $input ) or die "Cannot open file '$input' for reading: $!";
# open destination file for writing
open( my $out, '>', $output ) or die "Cannot open file '$output' for writing: $!";
print( "copying variable name and it's address from $input to $output \n" );
while ( $in ) { #For each line of input
if ( /$start/i .. /$end/i ) { #Block matching
push @block, $_;
}
if ( /$end/i ) {
for ( @block ) {
if ( /\s+ $keyword/ ) {
print $out join( '', @block );
last;
}
}
@block = ();
}
close $in or die "Cannot close file '$input': $!";
}
close $out or die "Cannot close file '$output': $!";
但我在处决后一无所获。任何人都可以建议我的示例想法吗?
【问题讨论】:
-
对不起先生,我明白你的意思了,我只是一步一步生成地址而已。