sm2

提供: Personal Tukubai for Academic
ナビゲーションに移動 検索に移動

名前

sm2 : キー単位での値の集計

書式

使い方とオプション

Usage

sm2 [+count] <k1> <k2> [<s1> <s2>] <file>
sm2 [+count] [key=<key>] [val=<val>] <file>

説明

<file> ファイルから、キーが同じレコードの各フィールドの値を集計します。キーフィールドはソートされている必要があります。指定方法は、開始フィールド <k1> から終了フィールド <k2> で指定する方法(従来記法)と、key=<key> で指定する方法(キーワード記法)があります。キーワード記法では、<key> は以下の2形式が可能です。

(通常形式)

1 

(範囲形式 連続したフィールドの指定)

1/4

従来記法で <k1> <k2> に 0 を指定した場合とキーワード記法で key=<key>を省略した場合はキー無しとなり、集計フィールドの総合計を出力します。

集計対象フィールドは、<s1> <s2> を指定した場合は <s1> から <s2> までのフィールド、val=<val> を指定した場合は key=<key> と同様なフィールド、いずれも指定しなかった場合は、従来記法では <k2> の次以降の全フィールド、キーワード記法ではキーフィールド以外の全フィールドになります。

いずれの記法においても、キーフィールドは集計対象フィールドより前のフィールドでなけれなりません。

なお、キー及び集計フィールドのいずれの範囲にも指定していないフィールドは出力されません。

例(その1)

店別日別の各商品の売数

No   店     日付     A  B  C  D  E
$ cat data
0001 新橋店 20060201 91 59 20 76 54
0001 新橋店 20060202 46 39 8  5  21
0001 新橋店 20060203 82 0  23 84 10
0002 池袋店 20060201 30 50 71 36 30
0002 池袋店 20060202 78 13 44 28 51
0002 池袋店 20060203 58 71 20 10 6
0003 新宿店 20060201 82 79 16 21 80
0003 新宿店 20060202 50 2  33 15 62
0003 新宿店 20060203 52 91 44 9  0
0004 上野店 20060201 60 89 33 18 6
0004 上野店 20060202 95 60 35 93 76
0004 上野店 20060203 92 56 83 96 75

店別の売れ数の合計を出します。第1フィールドから第2フィールドをキーとして、第4フィールドから第8フィールドを集計します。

従来記法

$ sm2 1 2 4 8 data > data2
$ cat data2
0001 新橋店 219 98 51 165 85
0002 池袋店 166 134 135 74 87
0003 新宿店 184 172 93 45 142
0004 上野店 247 205 151 207 157

キーワード記法

$ sm2 key=1/2 val=4/8 data > data2

例(その2)

“+count”オプションはキー毎の集計すると同時に、元データの各キー毎のレコードの行数をキーの直後に挿入出力します。

$ cat data
1111 3
1111 5
1111 2
2222 3
2222 10
3333 4
3333 8
3333 9
3333 6

キーが同一の行を出力します。

従来記法

$ sm2 +count 1 1 2 2 data > data2
$cat data2
1111 3 10
2222 2 13
3333 4 27

キーワード記法

$ sm2 +count key=1 val=2 data > data2

例(その3)

sm2 は小数点がある場合、各キー、各フィールド毎に一番精度の高い数に揃えて出力します。

$ cat data3
a 1.4 2.55
a 2   4
b 1.33 2.1
b 5.222 3.12

従来記法

$ sm2 1 1 2 3 data3
a 3.4 6.55
b 6.552 5.22

キーワード記法

$ sm2 key=1 val=2/3 data3

例(その4)

キーを 0 0 に指定すると、集計フィールドの総合計を出力します。

$ cat data4
a 1
b 2
c 3

従来記法

$ sm2 0 0 2 2 data4
6

キーワード記法

$ sm2 val=2 data4

指定したディレクトリに存在するファイルのサイズを合計するには

$ ls -l directory | tail -n +2 | sm2 0 0 5 5

Version and Edition

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

Edition : 1


© 2021 Universal Shell Programming Laboratory site