このエントリーをはてなブックマークに追加


指定したキーワードでファイルを分割する・csplit

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

PRODUCT NO:キーワードで分割してみる(1)

以下のコマンドを実行すると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

PRODUCT NO:キーワードで分割してみる(2)

前回のcsplitでは0バイトのファイルとファイル名がxxとなっています。
これをcsplitのオプションで変更します。
また、0バイトのファイルの出力を抑止と回数には*を指定し全てを分割してみます。
この場合、以下のようになります。

オプション説明
-z0バイトのファイルを出力しない
-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

これで指定したキーワード(文字列)でファイル分割することができます。
データファイルの加工やマスタデータファイルの加工などに利用することができます。

関連記事

 

 

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:21