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 Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間