他のフィールドの変数に基づくフィールドの平均を求めます。

他のフィールドの変数に基づくフィールドの平均を求めます。

他のフィールドの変数に基づいてフィールドの平均を取得する方法はありますか?たとえば、次の入力の場合

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

おすすめ記事