搜索字符串并在找到关键字时结束

时间:2011-08-11 20:09:31

标签: perl

我看到我让很多人感到困惑。让我澄清一下。

我有一个名为logdetail.txt的日志文件。在这个文件中有很多信息。在日志文件中,每个用户的信息都存储在Final Command Run <command>下。在每个Final Command字符串下,有我需要收集的信息,例如用户ID,ID状态,到期日期......

logdetail.txt示例

Final Command Run
User ID_1 
Expiration 
Validation Status
More Info 
More info 
Final Command Run
User ID_2
Expiration 
Validation Status
Less info 
Final Command Run
User ID_3
Expiration 
Validation Status
More info

我需要输出文件logssummary.txt来显示类似

的内容
User ID_1, Expiration, Validation
User ID_2,

我改变了下面的答案,我添加了一些东西,但它没有用。

use strict; 
use warnings;  
use Data::Dumper;  
my @all; 
my %data = (); 

open (Log_summary,">logsummary.txt");
open (INPUTFILE, "logdetail.txt");

while (%data = <INPUTFILE>) {

    next if /^\s*$/;  # skip empty lines     
    if (/^\s*Final\s*$/) {         
    push @all, { %data };         
    %data = ();         
    next;     
    }    
my ($key, $value) = split /\s*=\s*/, $_, 2;    
trim($key); 
trim($value);     
$data{$key} = $value; 
} 
push @all, { %data } if (%data);  # in case there is no Final at the end  print Dumper \@all;  
sub trim {    
     $_[0] =~ s/^\s+//;    
     $_[0] =~ s/\s+$//;
     }

close(INPUTFILE);

print Log_summary "\nNo more input - exiting\n";
print "\nNo more input - exiting\n";
close Log_summary;    

exit; 

2 个答案:

答案 0 :(得分:1)

尽可能地说,你在“Begin”之间的行之间有记录,并且你希望能够访问它们。这是解析这样一个文件的简单方法。我正在剥离前导和尾随空格,并补偿格式化中的空格。

在每个开头,它会将%data中的任何内容转储到@all并开始收集新的内容。

如果您愿意,可以尝试使用输入记录分隔符$/一次读取完整记录,而不是逐行读取。不确定这会让事情变得更容易。

use strict;
use warnings;

use Data::Dumper;

my @all;
my %data = ();
while (<>) {
    next if /^\s*$/;  # skip empty lines
    if (/^\s*Begin\s*$/) {
        push @all, { %data };
        %data = ();
        next;
    }
    my ($key, $value) = split /\s*=\s*/, $_, 2;
    trim($key); trim($value);
    $data{$key} = $value;
}
push @all, { %data } if (%data);  # in case there is no Begin at the end 
print Dumper \@all;

sub trim {
    $_[0] =~ s/^\s+//;
    $_[0] =~ s/\s+$//;
}

答案 1 :(得分:0)

为什么不只是grep '\(Name|ID\)' yourfile.txt > results.txt