sm5

提供: Personal Tukubai for Academic
2021年8月27日 (金) 05:50時点におけるPt4a editor (トーク | 投稿記録)による版 (Batch Update)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

名前

sm5 : 大計を出す

書式

使い方とオプション

Usage

sm5 [+<n>h] [-d<string>] <d1> <d2> <s1> <s2> <file>
sm5 [+<n>h] [-d<string>] [dummy=<dummy>] [val=<val>]

説明

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

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

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

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

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

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

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

-d<string> オプションでダミー文字列を変更することができます。この場合、フィールドの幅によらず、常に <string> が各ダミーフィールドに挿入されます。集計除外対象は、ダミーフィールドが <string> のレコードになります。

例(その1)

各都市での調査データ
$ 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 1 4 5 NF data > data2
$ cat 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

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

Version and Edition

Version : Tue Jun 18 19:00:37 JST 2019

Edition : 1


© 2021 Universal Shell Programming Laboratory site