2行が同じ文字で始まることを確認し、そうであれば平均を印刷し、そうでない場合は実際の値を印刷します。

2行が同じ文字で始まることを確認し、そうであれば平均を印刷し、そうでない場合は実際の値を印刷します。

最初の列の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 }

関連情報