もりはやメモφ(・ω・ )

ITとか読書感想文とか

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

参考になった

以下のサイトが参考になりました。ありがとうございます。

it-ojisan.tokyo