他のフィールドの変数に基づいてフィールドの平均を取得する方法はありますか?たとえば、次の入力の場合
a x 3
b y 4
a y 2
b x 5
b x 20
この出力が欲しい
a 2.5
b 9.67
列の値の平均を求めるawkスクリプトを見つけました。
awk '{ total += $3; count++ } END { print total/count }' file.txt
しかし、最初の列の各変数の平均を取得するには、forループをどのように追加する必要がありますか?
ファイルはタブで区切られます。
ありがとう
ベストアンサー1
あなたはこれからそれほど遠くありません。次に、インデックス付き配列を試してみてください$1
。
awk '{ total[$1] += $3; count[$1]++ } END {for (t in total) print t, total[t]/count[t]}' file
a 2.5
b 9.66667
または、質問のように小数点以下の2桁までを希望する場合:
$ awk '{ total[$1] += $3; count[$1]++ } END {for (t in total) printf "%s %.2f\n", t, total[t]/count[t]}' file
a 2.50
b 9.67