csplitコマンドでファイル内にある特定のキーワード(文字列)でファイルを分割することができます。
以下、伝票内容?が複数続く1つのテキストファイルを特定のキーワードで分割してみます。
使用するファイル内容は以下のものです。
$ cat denpyo.txt PRODUCT NO: 1 PRODUCT NAME: SQL SOFTWARE PRODUCT PRICE: 100 PRODUCT NO: 2 PRODUCT NAME: OS SOFTWARE PRODUCT PRICE: 200 PRODUCT NO: 3 PRODUCT NAME: HTML SOFTWARE PRODUCT PRICE 300 PRODUCT NO: 4 PRODUCT NAME: NETWORK SOFTWARE PRODUCT PRICE 400
以下のコマンドを実行するとPPRODUCT NO:で分割したファイルが3つ作成されます。
csplit denpyo.txt '/^PRODUCT NO:.*/' {2}
csplitの引数の1つ目は対象となるファイル、2つ目は分割するパターン、3つ目は回数となります。
以下のように分割された出力ファイル(xxから始まるファイル)が作成されます。
xx00は0バイトのファイルが出力されます。xx01, xx02と分割されたファイルが作成され、残りはxx03として出力されています。
$ csplit denpyo.txt '/^PRODUCT NO:.*/' {2} 0 60 59 123 $ ls -l -rw-r--r-- 1 sakura sakura 242 2011-07-11 01:04 denpyo.txt -rw-r--r-- 1 sakura sakura 0 2011-07-11 01:14 xx00 -rw-r--r-- 1 sakura sakura 60 2011-07-11 01:14 xx01 -rw-r--r-- 1 sakura sakura 59 2011-07-11 01:14 xx02 -rw-r--r-- 1 sakura sakura 123 2011-07-11 01:14 xx03 $ cat xx00 $ cat xx01 PRODUCT NO: 1 PRODUCT NAME: SQL SOFTWARE PRODUCT PRICE: 100 $ cat xx02 PRODUCT NO: 2 PRODUCT NAME: OS SOFTWARE PRODUCT PRICE: 200 $ cat xx03 PRODUCT NO: 3 PRODUCT NAME: HTML SOFTWARE PRODUCT PRICE 300 PRODUCT NO: 4 PRODUCT NAME: NETWORK SOFTWARE PRODUCT PRICE 400
前回のcsplitでは0バイトのファイルとファイル名がxxとなっています。
これをcsplitのオプションで変更します。
また、0バイトのファイルの出力を抑止と回数には*を指定し全てを分割してみます。
この場合、以下のようになります。
オプション | 説明 |
-z | 0バイトのファイルを出力しない |
-f 文字列 | ファイル名を指定した文字列+数字とする |
{*} | *を指定したので回数は分割できるかぎり実行 |
csplit -z -f denpyo denpyo.txt '/^PRODUCT NO:.*/' {*}
csplitの-zオプションにより0バイトのファイルが出力されていません。
また、-fオプションによりdenpyo00〜denpyo03の分割ファイルが作成されています。
$ csplit -z -f denpyo denpyo.txt '/^PRODUCT NO:.*/' {*} 60 59 60 63 $ ls -l -rw-r--r-- 1 sakura sakura 242 2011-07-11 01:04 denpyo.txt -rw-r--r-- 1 sakura sakura 60 2011-07-11 01:29 denpyo00 -rw-r--r-- 1 sakura sakura 59 2011-07-11 01:29 denpyo01 -rw-r--r-- 1 sakura sakura 60 2011-07-11 01:29 denpyo02 -rw-r--r-- 1 sakura sakura 63 2011-07-11 01:29 denpyo03
$ cat denpyo00 PRODUCT NO: 1 PRODUCT NAME: SQL SOFTWARE PRODUCT PRICE: 100 $ cat denpyo01 PRODUCT NO: 2 PRODUCT NAME: OS SOFTWARE PRODUCT PRICE: 200 $ cat denpyo02 PRODUCT NO: 3 PRODUCT NAME: HTML SOFTWARE PRODUCT PRICE 300 $ cat denpyo03 PRODUCT NO: 4 PRODUCT NAME: NETWORK SOFTWARE PRODUCT PRICE 400
これで指定したキーワード(文字列)でファイル分割することができます。
データファイルの加工やマスタデータファイルの加工などに利用することができます。