map コマンドは縦並びのデータを横並びにしてくれる。しかしながら、この一言で表すのは難しい。下の例を見ながら動作を理解してもらいたい。
引数num で数値n を指定すると、1~n 列目までを縦( レコード)キーとし、n+1 列目を横( カラム) キーとして表を作り、そこにn+2 列目の値を拾って当てはめてくれる。主キー、サブキーと、キーが2 階層あるようなデータの整理に活躍するコマンドなのである。
例 支店Aと支店Bのデータが混在
1 2 3 4 5 6 7 |
$ cat data1 支店A 1F売数 435241 支店A 2F売数 302114 支店A 3F売数 260141 支店B 1F売数 312498 支店B 2F売数 221387 支店B 3F売数 179162 |
mapコマンドで並び替え
1 |
$ map num=1 data1 > data2 |
データが整理される
1 2 3 4 |
$ cat data2 * 1F売数 2F売数 3F売数 支店A 435241 302114 260141 支店B 312498 221387 179162 |
sm2,sm4のsmはサムアップの意であり、どちらも列合計を求める(=縦に足す)計算をするためのものである。
両者の違いは、主キーの他にサブキーを維持するか否かである。sm2は維持しないためサブキー列を消し、列合計した行のみ出力する。一方sm4は、維持するため、列合計した行が増える形になる。
例 支店Aと支店Bのデータが混在
1 2 3 4 5 6 7 |
$ cat data1 支店A 1F売数 435241 支店A 2F売数 302114 支店A 3F売数 260141 支店B 1F売数 312498 支店B 2F売数 221387 支店B 3F売数 179162 |
sm2コマンドで合計を出す
1 |
$ sm2 1 1 3 3 data1 > data2 |
1 2 3 |
$ cat data2 支店A 997496 支店B 713047 |
sm4コマンドで合計を出す
1 |
$ sm4 1 1 2 2 3 3 data1 > data3 |
1 2 3 4 5 6 7 8 9 |
$ cat data3 支店A 1F売数 435241 支店A 2F売数 302114 支店A 3F売数 260141 支店A @@@@@@ 997496 支店B 1F売数 312498 支店B 2F売数 221387 支店B 3F売数 179162 支店B @@@@@@ 713047 |