#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS