昨日のエントリでawkとsedを使用しない縛りプレイをしたわけですが、awkを使ってみたら一撃でできちゃいました。

1
2
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

出力結果

1
2
3
4
        OREO    Ice     Juice
A       0       310     0
B       0       130     120
I       630     0       0

やっぱり、どの言語でやるかっていうのはだいじ。※note:awkの配列って最大いくつまでOKなんだろう。