最初の列の2行が同じ数字で始まっていることを確認したいので、これが発生した場合は2番目の列の平均を表示する必要があります。ファイルの例:
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%
たとえば、最初の2行はで始まります01
が、1行だけ08
(15行)で始まります。したがって、これら2つのケースに基づく出力は次のようになります。
01 21.5
...
...
...
08 21.8
...
...
...
私は次のawkラインで終わりました。ファイルには常に2つの類似した行があると完全に機能しますが、上記のファイルを使用すると(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 }