ファイルがあります。
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
。