awkの連想配列で同じキーが複数回出現するデータを集計する
ぱっとやりたかったので調べたところ、予想以上に簡単でした。シェル芸便利です。
やりたかったこと
以下のようなCSVファイルがあり、各キー(a,b,c,d)の合計を計算したいです。(実際のファイルはもっと大容量です)
a,1
b,2
c,3
a,4
b,5
c,6
d,7
どうやったか
awkコマンドでは以下が可能でした。
- 連想配列
- 連想配列に入った値を
for( i in arr)で簡単にループできる
$ cat hoge.csv | awk -F, '{arr[$1] = arr[$1] + $2}END{for(i in arr){print i , arr[i]} }'
こうなった
結果として以下のように集計ができました。便利ですね。
bash-3.2$ cat hoge.csv | awk -F, '{arr[$1] = arr[$1] + $2}END{for(i in arr){print i , arr[i]} }'
a 5
b 7
c 9
d 7
参考になった
以下のサイトが参考になりました。ありがとうございます。