特定の列の値に基づいて合計を印刷します。

特定の列の値に基づいて合計を印刷します。

ファイルがあります。

Name ID Savings
RK   1  10000
RS   2  10900
RK   1  1380
RS   2  10200

二人(RKとRS)の総貯蓄額を求めたいです。だから私が望む予想結果は次のとおりです。

RK 1 11380  (i.e 10000 + 1380)
RS 2 21100  (i.e 10900 + 10200)

答え1

$ awk 'NR > 1 { s[$2] += $3; n[$2] = $1 } END { for (i in s) { print n[i], i, s[i] }}' file
RS 2 21100
RK 1 11380

私たちは2つの配列を使用します。 1つは合計()を保存しs、もう1つは名前(n)を保存します。配列の索引付けはIDを使用して行われます(同じ名前の人が複数人いる可能性があるため、それをインデックスとして使用しません)。

入力の各行(ヘッダー行を除く)ごとに合計を更新し、名前を保存します。最後に保存された情報を確認して印刷してみましょう。

答え2

使用awk:

awk 'NR>1{seen[$1FS$2]+=$NF} END{for (x in seen) print x, seen[x]}' in

これは、列#1と列#2全体を読み取り、フィールド区切り文字をFSそのままにします(名前付き配列のスペースなど)seen。そして、$1FS$2最後のフィールド値の各固有の組み合わせを合計します。

最後に、x配列を変数として繰り返して配列を繰り返し、$1FS$2値とその合計を最初に印刷しますseen[x]

これがin入力ファイル名になります。NR>1ヘッダー行をスキップしています。エココード窒素数値=1 NR>1

関連情報