uspTukubaiコマンドに関する様々な資料がここにあります。

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

ABC順リスト |  カテゴリ別リスト
動画説明

sm5

概要

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

説明

<file> ファイルに大計(全行トータル)レコードを追加します。<d1> から
<d2> までのフィールド又は dummy=<dummy> で指定したフィールドをダミー
フィールド、<s1> から <s2> までのフィールド又は val=<val> で指定した
フィールドを集計フィールドとして、各集計フィールドの全合計レコードを
最終行に挿入します。<s1> <s2> を指定した場合は従来記法、dummy=<dummy>
を指定した場合はキーワード記法となります。<dummy> は以下の2形式が可
能です。

1. 1         (通常形式)
2. 1/4       (範囲形式 連続したフィールドの指定)

集計フィールドが指定されなかったときは、従来記法では <d2> で指定した
フィールドの次以降の全フィールド、キーワード記法ではダミーフィールド
以外の全フィールドを集計します。合計レコードのダミーフィールドは "@"
文字で補完されます。

キーワード記法で集計フィールドのみが指定され、ダミーフィールドが指定
されなかった場合は、集計フィールド以外の全フィールドがダミーフィール
ドになります。

"@" だけのダミーフィールドがひとつでも存在するレコードは集計から除外
されます。この機能により、sm4 が付与した "@" の小計、中計行を除外し
て、大計を計算することができます。

いずれの記法においても、ダミーフィールド、集計対象フィールドの順でな
けれなりません。また、全てのフィールドが、いずれかに指定されなければ
なりません。

+<n>h を指定した場合、最初の <n> 行はヘッダーとみなされ、集計の対象
とならず、そのまま出力されます。<n> を省略した場合は先頭行のみがヘッ
ダーとみなされます。

-d<string> オプションでダミー文字列を変更することができます。この場
合も、<string>だけのダミーフィールドがひとつでも存在するレコードは
集計から除外され、集計行のキーフィールドには <string> が挿入されま
す。


例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 <- 大計を出して終わり