次のファイルがあります。
user1, 10
user2, 5
user2, 6
user1, 15
user3, 23
user1, 15
列1(user1、user2、user3)ごとに合計を計算して、次のように作成したいと思います。
user1, 40
user2, 11
user3, 23
今後の最良の方法は何ですか?最初の列を繰り返しwhile
、2番目の列の合計が同じであれば?
答え1
awk 1行:
$ awk -F, '{a[$1] += $2} END { for (x in a) printf "%s, %s\n", x, a[x] }' < data
user1, 40
user2, 11
user3, 23
これは非常に簡単です。フィールド区切り文字はコンマに設定されます-F,
(出力のコンマは重複エントリに必要な唯一の変更です)。$1
と$2
は最初と2番目のフィールドで、awkには連想配列があるため、合計を収集するのは簡単です。sort
重要な場合は、後で印刷することもできます。
もちろん、Bash / ksh / zshでのみこれを行うこともできます。これは連想配列もサポートしているからです。しかし、これは醜い、遅く、興味深い値のために驚きを禁じる可能性が高いです。そして何らかの理由で大きなシェルがあるがawkを持たないシステムでのみ便利です。 (本当に必要な場合は編集履歴を確認してください...)