sm5 : 大計を出す。
Usage : sm5 [+<n>h] [-d<string>] <d1>
<d2> <s1> <s2> <file>
sm5 [+<n>h] [-d<string>] [dummy=<dummy>]
[val=<val>]
Version : Tue Oct 20 13:16:57 JST 2015
Edition : 1
$ cat data1
3 関東
4 中部
6 中国
7 四国
9 沖縄
$ cat data2
1 北海道
2 東北
4 中部
5 近畿
7 四国
9 沖縄
$ cat data3
4 九州
7 北陸
$ and data1 data2 data3 > result
$ cat result
4
7
例2
"sm4"で小計・中計を付与されたデータの場合
$ cat data
01 埼玉県 01 さいたま市 91 59 20 76 54
01 埼玉県 02 川越市 46 39 8 5 21
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 @@ @@@@@@@@@@ 219 98 51 165 85
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 八王子市 82 79 16 21 80
02 東京都 08 立川市 50 2 33 15 62
02 東京都 @@ @@@@@@@@@@ 298 215 184 110 229
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
03 千葉県 @@ @@@@@@@@@@ 207 240 112 120 82
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚木市 48 66 23 71 24
04 神奈川県 @@ @@@@@@@@@@ 170 134 138 211 118
$ sm5 1 4 5 NF data | keta > data2
(data2)
01 埼玉県 01 さいたま市 91 59 20 76 54
01 埼玉県 02 川越市 46 39 8 5 21
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 @@ @@@@@@@@@@ 219 98 51 165 85 ※
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 八王子市 82 79 16 21 80
02 東京都 08 立川市 50 2 33 15 62
02 東京都 @@ @@@@@@@@@@ 298 215 184 110 229 ※
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
03 千葉県 @@ @@@@@@@@@@ 207 240 112 120 82 ※
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚木市 48 66 23 71 24
04 神奈川県 @@ @@@@@@@@@@ 170 134 138 211 118 ※
@@ @@@@@@ @@ @@@@@@@@@@ 894 687 485 606 514
※ダミーフィールドにダミー文字列が存在するので、集計から除外されます。
例3
-d<string> オプション
$ cat data
01 埼玉県 01 さいたま市 91 59 20 76 54
01 埼玉県 02 川越市 46 39 8 5 21
01 埼玉県 03 熊谷市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 八王子市 82 79 16 21 80
02 東京都 08 立川市 50 2 33 15 62
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚木市 48 66 23 71 24
$ sm5 -d+++ 1 4 5 NF data > data2
01 埼玉県 01 さいたま市 91 59 20 76 54
01 埼玉県 02 川越市 46 39 8 5 21
01 埼玉県 03 熊谷市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 八王子市 82 79 16 21 80
02 東京都 08 立川市 50 2 33 15 62
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚木市 48 66 23 71 24
+++ +++ +++ +++ 894 687 485 606 514
コラム
smツールの合わせ技
データを集計する帳票をシェルで書く場合に非常によくあるパターンとして、
「同じキーを集計して小計、中計を出して最後に大計(トータル)を出す」と
いうものがあります。この様な場合は、sm2 sm4 sm5 を多段に組み合わせて
使用します。
cat data |
sm2 1 6 7 NF | <- 同一キーで集計
sm4 1 4 5 6 7 NF | <- 小計
sm4 1 2 3 6 7 NF | <- 中計
sm5 1 6 7 NF > result <- 大計を出して終わり