#navi(../)
* 指定したキーワードでファイルを分割する・csplit [#n90b5b04]
#contents
csplitコマンドでファイル内にある特定のキーワード(文字列)でファイルを分割することができます。~
以下、伝票内容?が複数続く1つのテキストファイルを特定のキーワードで分割してみます。
#br
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 使用するファイル内容 [#qe6076d2]
使用するファイル内容は以下のものです。
$ 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
* PRODUCT NO:キーワードで分割してみる(1) [#ne4ed227]
以下のコマンドを実行するとPPRODUCT NO:で分割したファイルが3つ作成されます。
csplit denpyo.txt '/^PRODUCT NO:.*/' {2}
** 実行結果 [#vfe2cfd3]
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
* PRODUCT NO:キーワードで分割してみる(2) [#we9623cb]
前回のcsplitでは0バイトのファイルとファイル名がxxとなっています。~
これをcsplitのオプションで変更します。~
また、0バイトのファイルの出力を抑止と回数には*を指定し全てを分割してみます。~
この場合、以下のようになります。~
|オプション|説明|
|-z|0バイトのファイルを出力しない|
|-f 文字列|ファイル名を指定した文字列+数字とする|
|{*}|*を指定したので回数は分割できるかぎり実行|
csplit -z -f denpyo denpyo.txt '/^PRODUCT NO:.*/' {*}
** 実行結果 [#v70ce404]
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
これで指定したキーワード(文字列)でファイル分割することができます。~
データファイルの加工やマスタデータファイルの加工などに利用することができます。
* 関連記事 [#e2591386]
-サイズや行数でファイルを分割する場合~
[[逆引きUNIXコマンド/ファイルの分割をしたい・splitコマンド]]
#br
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
#br