くんすとの備忘録

プログラミングや環境設定の覚え書き。

【シェル芸】bashのワンライナーでクロス集計2(※awkで一撃!)

昨日のエントリawksedを使用しない縛りプレイをしたわけですが、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なんだろう。

広告