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

如何使用awk或perl处理此文件?,perl,awk,Perl,Awk,我想处理一些日志文件,其格式如下: <itemA> <num> <itemB> <num> <itemC> <num> 我想得到一个包含以下信息的摘要 对于每个项目,我想知道字段的范围和平均值 很明显,你可以手工统计,但是…为什么要麻烦呢 很明显,你可以手工统计,但是……何必麻烦呢?我同意赛斯的观点,更喜欢他的答案。以下是Awk中的手动解决方案,用于学习: #!/usr/bin/awk -f #invok

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

<itemA>    <num>
<itemB>    <num>
<itemC>    <num>
我想得到一个包含以下信息的摘要

对于每个项目,我想知道字段的范围和平均值

很明显,你可以手工统计,但是…为什么要麻烦呢


很明显,你可以手工统计,但是……何必麻烦呢?

我同意赛斯的观点,更喜欢他的答案。以下是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] 
  }; 
}

我同意赛斯的观点,更喜欢他的回答。以下是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] 
  }; 
}
谢谢你的提示。然而,push语句旁边的paren有一个拼写错误-应该是push@{$items{$a}},$b;这样做:推{$items{$a}},$b ;;谢谢你的提示。然而,push语句旁边的paren有一个拼写错误-应该是push@{$items{$a}},$b;这样做:推{$items{$a}},$b ;;