「sm2」の版間の差分
Pt4a editor (トーク | 投稿記録) 細 (Batch Update) |
Pt4a editor (トーク | 投稿記録) 細 (Batch Update) |
||
13行目: | 13行目: | ||
== 説明 == | == 説明 == | ||
− | <file> ファイルから、キーが同じレコードの各フィールドの値を集計します。キーフィールドはソートされている必要があります。指定方法は、開始フィールド <k1> から終了フィールド <k2> | + | <file> ファイルから、キーが同じレコードの各フィールドの値を集計します。キーフィールドはソートされている必要があります。指定方法は、開始フィールド <k1> から終了フィールド <k2> で指定する方法(従来記法)と、key=<key> で指定する方法(キーワード記法)があります。キーワード記法では、<key> は以下の2形式が可能です。 |
(通常形式) | (通常形式) | ||
131行目: | 131行目: | ||
© 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site] | © 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site] | ||
− | |||
[[Category:man]] | [[Category:man]] |
2021年6月7日 (月) 08:37時点における最新版
名前
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