我想检查第一列中的两行是否以相同的数字开头,如果发生这种情况,则应显示第二列的平均值。文件示例:
01 21 6 10% 93.3333%
01 22 50 83.3333% 93.3333%
02 20.5 23 18.1102% 96.8504%
02 21.5 100 78.7402% 96.8504%
03 22.2 0 0% 100%
03 21.2 29 100% 100%
04 22.5 1 5.55556% 100%
04 23.5 17 94.4444% 100%
05 22.7 9 7.82609% 100%
05 21.7 106 92.1739% 100%
06 23 11 17.4603% 96.8254%
06 22 50 79.3651% 96.8254%
07 20.5 14 18.6667% 96%
07 21.5 58 77.3333% 96%
08 21.8 4 100% 100%
09 22.6 0 0% 100%
09 21.6 22 100% 100%
例如,前两行以 开头01
,但只有一行以08
(第 15 行)开头。因此,基于这两种情况的输出应该是:
01 21.5
...
...
...
08 21.8
...
...
...
我最终得到了以下 awk 行,当文件总是有两个相似的行时,该行非常有效,但使用上面显示的文件时会失败(因为第 15 行):
awk '{sum+=$2} (NR%2)==0{print sum/2; sum=0;}'
欢迎任何提示,
答案1
也许是这样的:
#!/usr/bin/awk -f
function reset(){
n = $1; sum = $2; cnt = 1
}
{
reset()
while(getline){
if(n == $1){
sum += $2; cnt++;
}else{
print n, sum/cnt
reset()
}
}
}
END{ print n, sum/cnt }