awk は、2 番目の列のキーに基づいて列の平均を計算します。

awk は、2 番目の列のキーに基づいて列の平均を計算します。

私は持っています

Sample_A   100
Sample_A   200
Sample_B   300
Sample_B   100

1行の各キーについて、2行の値の平均を印刷したいと思います。

Sample_A   150
Sample_B   200

他の質問に対する優れた答えを使用して、行1の各キーに対して行2の値の合計を印刷できます。 2番目の列に基づいて最初の列の合計を取得します。

コマンドは次のとおりです。

awk 'NR { k = $1; cnt[k] += $2 } END { print; for (k in cnt) print k,cnt[k]}' File.txt

これは生産します

Sample_A  300
Sample_B  400

ただし、平均を計算するには、次のようにキー発生回数を保存する方法が必要です。

awk 'NR { k = $1; cnt[k] += $2; count(k)=$2} END { print; for (k in cnt) print k,cnt[k]/count(k)}' File.txt

しかし、私のcount(k)コードは少し目が遠く動作しません。

ベストアンサー1

一緒にawkできること:

awk '{seen[$1]+=$2; count[$1]++} END{for (x in seen)print x, seen[x]/count[x]}' infile
Sample_A 150
Sample_B 200

またはGNUを使用してくださいdatamash:

datamash -t' ' --sort --group 1 mean 2 <infile
Sample_A 150
Sample_B 200

おすすめ記事