【シェル芸】bashのワンライナーでクロス集計2(※awkで一撃!)
昨日のエントリでawkとsedを使用しない縛りプレイをしたわけですが、awkを使ってみたら一撃でできちゃいました。
awk 'NR!=1{k1[$1]=0;k2[$2]=0;ks[$1,$2]=ks[$1,$2]+$3}END{for(h in k2) printf "\t" h;print"";for(o1 in k1){printf o1;for(o2 in k2){v=ks[o1,o2];printf "\t" (v==""?0:v)}print ""}}' sample.txt
出力結果
OREO Ice Juice A 0 310 0 B 0 130 120 I 630 0 0
やっぱり、どの言語でやるかっていうのはだいじ。
※note:awkの配列って最大いくつまでOKなんだろう。