すっかりスルー気味でしたが、クロス集計用のコマンドがあります。

Mon Nov 4 15:54:15 JST 2013 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 1938, keywords:寝る,シェル芸,クロス集計 この記事は最終更新日が7年以上前のものです。

こんにちは。風邪ひき大王です。執筆は最後の生業とどなたかが言っていましたが、私も体が弱っていてここに何か書くくらいしか気力が起きません。

以前ウェブで、@iktakahiroさんの「コマンドでクロス集計する」というのが反響を呼んでいました。

AWK User会(たぶんさいとうさん)もやってます。

シェル芸勉強会にいつも参加してくださるくんすとさんも、インスパイアされているご様子。

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系のコマンドもあります。

しゃっくりが止まらないので寝るます。

ノート   このエントリーをはてなブックマークに追加 
 

prev:こっちに書きました。 next:出版社に送る原稿には日本語と英単語の間にスペースを入れない方が良いらしいのであるが、ではどうしろと?

やり散らかし一覧

記事いろいろ