シェルワンライナー160本ノック問題50
問題50 売り上げの集計
問題のファイルは
https://github.com/shellgei/shellgei160
からダウンロードできる。
二つの表を突き合わせて売り上げを正しく集計する問題だった。自力で解けたと思って答えを見たら間違えており、とても悔しい。枝番の処理をきちんとできていなかった。
自分の間違った解答は
sort -k3,4n sales | awk '{print $3,$4,$5}' | join -a 1 stones_master - | awk '{a[$3]+=($4)*($6)}END{for(i in a)print i,a[i] }'
である。これだと2つ目の awk で連想配列を用いたときに枝番の情報が抜け落ちて余計なものがカウントされるようになってしまう。
正しい解答は
awk '{a[$3$4]+=$5}END{for(k in a)print k,a[k]}' sales | sort | join <(sed 's/ //' stones_master ) - | awk '{print $2,$3*$4}'
となる。sales に関しては枝番を商品番号に文字列としてくっつけてしまっている。stones_master ファイルは最初の空白のみを除去すればいいので sed でやっつけてしまっている。