Linux Tips |
|
テキストファイルを任意の文字列で分割するには
北浦訓行
2007/12/26 |
「ファイルを分割するには」では、splitコマンドでファイルを分割する方法を説明した。
splitコマンドでは、ファイルサイズや行数などを指定してファイルを分割するが、任意の文字列によって分割することはできない。ここでは、任意の文字列によってテキストファイルを分割する方法を説明する。
テキストファイルを任意の文字列で分割する場合は、csplitコマンドを利用する。例えば、章単位(行頭に「第x章」という文字がある場合)でsample.docというファイルを分割する場合、以下のコマンドを実行すればいい。
$ cat sample.doc
第1章
これは、第1章の文章です。
第2章
これは、第2章の文章です。
第3章
これは、第3章の文章です。
第4章
これは、第4章の文章です。
第5章
これは、第5章の文章です。
$ csplit sample.doc /^第[1-9]章/ {*}
|
コマンドの引数として、最低でも分割元のテキストファイル(ここではsample.doc)と、「/」で囲んだ検索文字列(ここでは行頭にある「第1章」から「第9章」)、分割する回数(ここでは{*}としたので可能な限り分割)の3つを指定する。
上記のコマンドを実行した結果、「xx00」から「xx05」というファイルが作成される。sample.docの1行目に「第1章」という文字列があるため、xx00は0バイトのファイルになる。0バイトのファイルが作成されることを防ぐには、-zオプションを指定すればいい。
また、csplitコマンドでは、作成されるファイル名を前半(xxの部分)と後半(2けたの数字の部分)に分けて指定することもできる。前半は-fで、後半は-bの各オプションで指定する。-bにはprintf(「man 3 printf」で表示される)形式の変換文字列を指定するが、単純に数字のけた数を変更するだけであれば、「-n 4」のようにすればいい。
例えば、作成されるファイルを「sample<4けたの数字>」にして、0バイトのファイルを作成しない場合は、以下のように指定する。
$ csplit -z -f sample -n 4 sample.doc /^第[1-9]章/ {*}
$ ls
sample.doc sample0000 sample0001 sample0002 sample0003 sample0004
|
Linux Squareフォーラム Linux Tipsカテゴリ別インデックス |
Linux & OSS 記事ランキング
本日
月間