亲爱的Stackoverflow和Perl同志:
我对Perl有一点疑问: 我正在写一个日志阅读器。日志格式是这样的
2013-05-27T19:01:23 [INFO] item_id:1, state:start at Reader.pm line 23
2013-05-27T19:01:29 [INFO] item_id:2, state:pause at Reader.pm line 23
2013-05-27T19:01:30 [INFO] item_id:1, state:start at Reader.pm line 23
...
我的目标是计算有多少状态:启动给定的item_id,例如,item_id:1,显示。在这种情况下,它应该是2。
到目前为止,我所想到的只是言语的反击:
sub count {
my $count_start = 0;
open (MYFILE, $file_location) or die "Wrong filename";
while ($file_location = <MYFILE>){
while ($file_location =~ /\bstart\b/ig){
$count_start++;
}
}
close (MYFILE);
return $count_start;
}
但我不得不计算“开始”出现多少次,但“开始”和“身份”出现在同一行的次数。我知道我必须添加一些正则表达式,但无法弄清楚任何事情。有什么想法吗?
问候!
答案 0 :(得分:2)
假设该字段的顺序是可预测的:
my %counts;
while (<>) {
++$counts{$1} if /item_id:(\S+), state:start/;
}
答案 1 :(得分:-1)
对你来说是一个讨厌的单行:
mogul@guldager:~/tmp$ perl -MData::Dumper -ne '$h{$1}++ if /(\d+), state:start/;END{print Dumper \%h}'<input-data.txt
$VAR1 = {
'1' => 2
};