すべての項目を見つけて一緒に追加します。

すべての項目を見つけて一緒に追加します。

次のファイルがあります。

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を持たないシステムでのみ便利です。 (本当に必要な場合は編集履歴を確認してください...)

関連情報