サイト内検索:

ssorter

名前

ssorter : キーでファイル分割する (ストリーミングモード)

書式

使い方とオプション

Usage

ssorter [options] <filename>.. <file>

Option

-d : delete key
-a : append file

説明

<file> を読み込み、分割先ファイル名 <filename> で指定したキーフィールドの値が同一のレコードでファイルを分割します。例えば、第2フィールドが同じ値を持つレコードで、ファイルを分割したいときは、data.%2 のように、<filename> を指定します。この時、分割先ファイル名は、data.(第2フィールドの値) となります。ssorter は sorter と同様に、キーフィールドの値はソートされている必要はありません。

<filename> を複数指定することができます。

<filename> におけるキーフィールドは、%(フィールド番号)と指定しますが、%5.2 %5.1.3 のように、サブストリング指定も可能です。この場合、開始位置、長さともに3桁以下の数字でなければなりません。

%指定において、%1.5 を %{1.5} のように {} で範囲を明確にして記述することができます。この場合、桁数の制限はありません。また、負数を指定することもできます。開始位置に負数を指定した場合は、フィールド末尾からの指定になります。長さに負数を指定した場合は、フィールド長から引いた長さになります。

ssorter が sorter と異なる点は、sorter が <file> 全体を読み込んでから出力するのに対し、ssorter は入力ファイルを読み込みながら出力を行うことです。また、ssorter は一旦オープンした出力ファイルは、ssorter が終了するまでクローズすることはありませんので、出力ファイルが名前付きパイプであっても正しく動作します(sorter は1つの出力ファイルを複数回オープンし直すことがあります)。

例(その1)

$ cat 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

$ ssorter data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 87  1月 15 10:30 data.01       ↑
-rw-r--r-- 1 usp usp 82  1月 15 10:30 data.02 4つのファイルに
-rw-r--r-- 1 usp usp 77  1月 15 10:30 data.03 分割された
-rw-r--r-- 1 usp usp 91  1月 15 10:30 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) (サブストリング指定)

$ ssorter data.%1.2.1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 87  1月 15 10:31 data.1
-rw-r--r-- 1 usp usp 82  1月 15 10:31 data.2
-rw-r--r-- 1 usp usp 77  1月 15 10:31 data.3
-rw-r--r-- 1 usp usp 91  1月 15 10:31 data.4

例(その3) (-a 指定)

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

$ ssorter data.%1 data
$ ssorter -a data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 174  1月 15 10:32 data.01
-rw-r--r-- 1 usp usp 164  1月 15 10:32 data.02
-rw-r--r-- 1 usp usp 154  1月 15 10:32 data.03
-rw-r--r-- 1 usp usp 182  1月 15 10:32 data.04

$ cat data.01
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 01 さいたま市 91 59 20 76 54
01 埼玉県 03 熊谷市 82 0 23 84 10
01 埼玉県 01 さいたま市 91 59 20 76 54

例(その4) (-d 指定)

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

$ ssorter -d data.%1 data
$ ls -l data.*
-rw-r--r-- 1 usp usp 81  1月 15 10:33 data.01
-rw-r--r-- 1 usp usp 76  1月 15 10:33 data.02
-rw-r--r-- 1 usp usp 71  1月 15 10:33 data.03
-rw-r--r-- 1 usp usp 85  1月 15 10:33 data.04

$ cat data.01
埼玉県 03 熊谷市 82 0 23 84 10
埼玉県 01 さいたま市 91 59 20 76 54

注意

出力ファイルの個数の上限は 1000 に制限されています。

Version and Edition

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

Edition : 1


© 2021 Universal Shell Programming Laboratory site

戻る