Tukubaiオンラインコマンドマニュアル

sorter(1)

【名前】

sorter : キーでファイル分割する(キーについて整列不要)

【書式】

Usage   : sorter.NEW [options] <filename> <file>
Options : -d : delete key
          -a : append file
          -z : compress
Version : Mon Nov 18 12:16:37 JST 2013

【説明】

<file>を読み込み、分割先ファイル名<filename>で指定したキーフィールドの値が同一のレコードでファイルを分割する。たとえば、第2フィールドが同じ値を持つレコードでファイルを分割したいときはdata.%2のように<filename>を指定する。この時、分割先ファイル名は、data.(第2フィールドの値)となる。

sorterはkeycutと異なりキーフィールドの値は整列されている必要はない。また、レコードは発生順にファイルに分割されていくので分割結果も整列されない。

<filename>におけるキーフィールドは%(フィールド番号)と指定するが%5.2や%5.1.3のようにサブストリング指定も可能だ。%指定において%1.5を%{1.5}のように{}で範囲を明確にして記述することができる。

【例1】

$ at data
04 神奈川県 13 横浜市 92 56 83 96 75
01 埼玉県 03 熊谷市 82 0 23 84 10
03 千葉県 10 千葉市 52 91 44 9 0
02 東京都 04 新宿区 30 50 71 36 30
01 埼玉県 01 さいたま市 91 59 20 76 54
03 千葉県 12 柏市 95 60 35 93 76
04 神奈川県 16 小田原市 45 21 24 39 03
02 東京都 05 中央区 78 13 44 28 51
$ sorter data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 87 2月 19 11:14 data.01       ↑
-rw-r--r-- 1 usp usp 82 2月 19 11:14 data.02 4つのファイルに
-rw-r--r-- 1 usp usp 77 2月 19 11:14 data.03 分割された
-rw-r--r-- 1 usp usp 91 2月 19 11:14 data.04       ↓
$ cat data.01
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 01 さいたま市 91 59 20 76 54
$ cat data.02
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
$ cat data.03
03 千葉県 10 千葉市 52 91 44 9 0
03 千葉県 12 柏市 95 60 35 93 76
$ cat data.04
04 神奈川県 13 横浜市 92 56 83 96 75
04 神奈川県 16 小田原市 45 21 24 39 03
$

【例2】

$ sorter data.%1.2.1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 87 2月 19 11:15 data.1
-rw-r--r-- 1 usp usp 82 2月 19 11:15 data.2
-rw-r--r-- 1 usp usp 77 2月 19 11:15 data.3
-rw-r--r-- 1 usp usp 91 2月 19 11:15 data.4
$

【例3】

-aオプションを指定すると分割先ファイルは追記されている。分割先ファイルが無いときは新たに作成されている。このオプションを指定しないときはファイルは上書きされている。

$ sorter data.%1 data
$ sorter -a data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 174 2月 19 11:16 data.01
-rw-r--r-- 1 usp usp 164 2月 19 11:16 data.02
-rw-r--r-- 1 usp usp 154 2月 19 11:16 data.03
-rw-r--r-- 1 usp usp 182 2月 19 11:16 data.04
$

【例4】

-dオプションを指定するとキーフィールドを除いたレコードを分割先ファイルに作成する。キーフィールド指定が%1.2.1等のサブストリグン指定であっても、キーフィールド全体(この例だと第1フィールド全体)が取り除かれる。

$ $ sorter -d data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 81 2月 19 13:13 data.01
-rw-r--r-- 1 usp usp 76 2月 19 13:13 data.02
-rw-r--r-- 1 usp usp 71 2月 19 13:13 data.03
-rw-r--r-- 1 usp usp 85 2月 19 13:13 data.04
$ cat data.01
埼玉県 03 熊谷市 82 0 23 84 10
埼玉県 01 さいたま市 91 59 20 76 54
$

【例5】

-zオプションを指定すると出力ファイルがgzip圧縮形式になる。

$ sorter -z data.%1.gz data
$ ls -l data.*
-rw-r--r-- 1 usp usp  98 2月 19 13:17 data.01.gz
-rw-r--r-- 1 usp usp  94 2月 19 13:17 data.02.gz
-rw-r--r-- 1 usp usp  82 2月 19 13:17 data.03.gz
-rw-r--r-- 1 usp usp 100 2月 19 13:17 data.04.gz
$ gunzip < data.01.gz
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 01 さいたま市 91 59 20 76 54
$

【備考】

sorter(1)は基本的には入力ファイルをすべて読み込んでから処理する。ただし、メモリが不足したときおよび物理メモリの半分以上を使用した場合は、一旦ファイルへ出力してから処理を続行する。

-aオプションと-zを併用したときはすでに存在する圧縮ファイルに圧縮ファイルが追記されている。出力ファイルはgunzipで正しく解凍される。

sorter.cはzlibを使用している。コンパイル時はcc -static -O3 -o sorter sorter.c -lzのようにオプションを指定する。

【関連項目】

keycut(1)フィールド形式(5)

last modified: 2014-02-27 17:02:27