すっかりスルー気味でしたが、クロス集計用のコマンドがあります。
Mon Nov 4 15:54:15 JST 2013 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2117, keywords:寝る,シェル芸,クロス集計 この記事は最終更新日が7年以上前のものです。
こんにちは。風邪ひき大王です。執筆は最後の生業とどなたかが言っていましたが、私も体が弱っていてここに何か書くくらいしか気力が起きません。
以前ウェブで、@iktakahiroさんの「コマンドでクロス集計する」というのが反響を呼んでいました。
AWK User会(たぶんさいとうさん)もやってます。
シェル芸勉強会にいつも参加してくださるくんすとさんも、インスパイアされているご様子。
- http://kunst1080.hatenablog.com/entry/2013/06/01/160617
- http://kunst1080.hatenablog.com/entry/2013/06/02/234025
Tukubaiのmapコマンドがそれ
そんでもって、Tukubaiの総本山である某社のエンジニアは、シェル(シェルスクリプト)でクロス集計などは一日に何度もやっているので、それ専用のコマンドを使っています。
例えば、くんすとさんのところのデータ:
A Ice 130
A Ice 180
B Juice 120
B Ice 130
I OREO 210
I OREO 210
I OREO 210
(空白はタブではなくスペースです。)
をクロス集計したければ、次のようにコマンドを使います。
まずsm2という集計のコマンドで、同じキーを持つレコードを足し算します。
uedamac:~ ueda$ cat data | sort | sm2 1 2 3 3
A Ice 310
B Ice 130
B Juice 120
I OREO 630
さて、これで1列目を縦軸、2列目を横軸に持って行きたいわけですが、mapというコマンドで一発です。
uedamac:~ ueda$ cat data | sort | sm2 1 2 3 3 | map num=1
* Ice Juice OREO
A 310 0 0
B 130 120 0
I 0 0 630
おわりに
わたしからも、bash(シェル)最強、と申し上げておきます。Tukubaiのオープン版はこちらとこちらにありますのでステマしておきますね。join系のコマンドもあります。
しゃっくりが止まらないので寝るます。