我想处理一些格式如下的日志文件:
<itemA> <num>
<itemB> <num>
<itemC> <num>
我想获得包含以下信息的摘要
我希望了解<num>
字段的范围和<num>
的平均值
答案 0 :(得分:5)
use Statistics::Lite;
while (<>)
{
my ($a,$b) = split;
push(@{$items{$a}},$b);
}
foreach my $key (keys %items)
{
print "$key\n";
print Statistics::Lite::statsinfo(@{$items{$key}});
}
显然你可以手动进行统计,但是......为什么要这么麻烦?
答案 1 :(得分:3)
我同意塞思,并且更喜欢他的回答。这是Awk中的手动解决方案,用于学习目的:
#!/usr/bin/awk -f
#invoke with: < infile stats.awk
{
i = $1; v = $2;
count[i]++;
sum[i] += v;
if (v > max[i] || count[i] == 1) { max[i] = v };
if (v < min[i] || count[i] == 1) { min[i] = v };
}
END {
for (i in count) {
print i " range: " min[i] ".." max[i] " avg: " sum[i] / count[i]
};
}