1

このような行のファイルがあります(列はタブで区切られています)

2    1.414455    3.70898
2    2.414455    3.80898
2    3.414455    3.90898
2    1.414455    3.90898
4    4.414455    7.23898
4    3.414455    6.23898
4    5.414455    8.23898

つまり、最初の列が整数で、残りの2つの列が浮動小数点である連続した行があります。

以下のように減らしたい

2    2.164455    3.75898
4    4.414455    7.23898

ここで、最初の列を保持し、同じ最初の列を持つすべての要素の2番目と3番目の列の平均を取ります。同じ最初の要素を持つ連続する行の数は異なる場合がありますが、それらは常に連続します。

私はperlでこれを行うことができますが、私のために同じことを行うことができるより単純なbash / sed / awkミックスがあるかどうか疑問に思っていましたか?

4

1 に答える 1

3

awkの使用:

awk '{a[$1]+=$2;b[$1]+=$3;c[$1]++;}END{for(i in c)print i, a[i]/c[i],b[i]/c[i];}' file
2 2.16445 3.83398
4 4.41446 7.23898

3つの異なる配列を使用します。aとbは2番目と3番目の列の合計を保持し、cは要素の数を保持します。最後に、平均を計算して印刷します。

于 2012-11-06T05:24:39.203 に答える