我如何使用awk或perl处理此文件?

时间:2011-06-05 00:30:00

标签: perl awk

我想处理一些格式如下的日志文件:

<itemA>    <num>
<itemB>    <num>
<itemC>    <num>

我想获得包含以下信息的摘要

我希望了解<num>字段的范围和<num>的平均值

的每个项目

2 个答案:

答案 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] 
  }; 
}