csplit - 正規表現等のパターンを用いてファイルを分割する

スポンサーリンク

csplitコマンドはsplitコマンドと同様にファイルを分割するコマンドになります。

splitコマンドと異なる点は、例えば、ファイル分割の方法を正規表現を指定して、パターンにマッチした箇所で内容が始まるようにファイルを分割できます。

split - ファイルを分割する
splitコマンドはファイルを分割するコマンドになります。 分割したファイルはcatコマンド等で結合することができます。また、--filterオプションを用いれば、分割後のファイルにさらにコマンドを実行することができます。

また、csplitコマンドは出力として分割したファイルのサイズを結果として表示します。

スポンサーリンク

csplitコマンドの使い方

csplitコマンドは入力ファイルとパターンを指定して、ファイルを分割します。ファイルを分割できた場合、コマンドの出力結果として、分割したファイルのサイズが表示されます。

csplitコマンドで利用できるパターンは主に3つのタイプがあります。1つ目は何行目で分割するか、2つ目は正規表現で分割するか、3つ目は前に指定したパターンの分割方法を何回繰り返すかになります。

基本的にパターン1つにつき、1回の分割になります。

file.txt

コマンド例と実行結果

 

何回分割するかを指定する場合、パターンの後に'{repeat-count}'で、指定します。

この'{repeat-count}'は、実際には前のパターンを2回繰り返す場合'{2}'とし、入力ファイルが終了するまで指定する場合は'{*}'を指定します。

コマンド例と実行結果

 

コマンド例と実行結果

 

 

 

csplitコマンドのパターンについて

csplitコマンドの構文は

csplit [option]... input... pattern...

で、inputは入力ファイル、patternはcsplitコマンドで利用できるパターンになります。

csplitコマンドのパターンには、主に3つのパターンがあります。1つ目は何行目での分割、2つ目は正規表現での分割、3つ目は前のパターンの繰り返しです。

また、それぞれの分割パターンに対して、下のファイルを分割します。

file.txt

 

 

 

何行目での分割:n

何行目で分割するかどうかは単純に数字を指定することで、その行数で分割することができます。

コマンド例と実行結果

 

このパターンを繰り返した場合、次のn行目までを分割します。また、csplitコマンドはエラーが出るとそれまでに分割したファイルはすべて削除されます。エラーが出た時にファイルを削除されないためには、-kオプションを使用する必要があります。

コマンド例と実行結果

 

 

 

正規表現での分割:/regexp/[offset]

正規表現での分割を行う場合、'/regexp/'または'%regexp%'でパターンを指定することができます。また、'/regexp/1'や'/regexp/-1'のようにoffsetを加えると正規表現にマッチした行からoffset分だけずらして分割できます。

コマンド例と実行結果(/regexp/)

 

offsetが正の数の場合、マッチしたパターンの行から後ろの行にずらすことができます。

コマンド例と実行結果(/regexp/1)

 

 

offsetが府の数の場合、マッチしたパターンの行から前の行にずらすことができます。

コマンド例と実行結果(/regexp/-1)

 

 

 

csplitコマンドの利用例

ファイルを分割する
(オプションなし)

csplitコマンドは、入力ファイルとパターンを引数にすることでファイルを分割することができます。分割されたファイルはデフォルトでは、'xx'の後に2桁の数字が入ったファイルが作成されます。標準入力を入力ファイルとする場合は'-'を利用することができます。

また、csplitコマンドが実行された結果は、分割されたファイルサイズが表示されます。

分割されたファイルは'cat xx*'のようにソートされた順番で結合することで元に戻すことができます。

コマンド例と実行結果

分割されたファイル

 

 

 

実行結果の分割後ファイルサイズを表示しない
(-sオプション)

-sオプション(--silentオプション)または-qオプション(--quietオプション)を用いることで、csplitコマンドの実行結果の分割後ファイルサイズを表示しないようにできます。

コマンド例と実行結果

 

 

 

分割されたファイルの名前の接頭辞を変更
(-fオプション)

-fオプションを用いることで、分割されたファイルの名前'xx'を別の名前に変更できます。

コマンド例と実行結果

分割されたファイル

 

 

 

分割されたファイルの接尾辞を変更
(-bオプション)

-bオプションを用いることで分割されたファイルに付けられる接尾辞(00,01,...の部分)を変更できます。

-bオプションで指定する接尾辞はC言語のprintfのような形式で指定することができます。
-bオプションで変更する場合は、分割されたファイルの数字が入るようにフォーマット形式を入れる必要があります。

使用できるフォーマット形式は、

%u(10進数)
%o(8進数)
%x(16進数,アルファベット小文字)
%X(16進数,アルファベット大文字)

になります。また、%uの別形式として、%iや%dを用いることができます。

コマンド例と実行結果

 

 

 

分割されたファイルの接尾辞の桁数を変更
(-nオプション)

-nオプションで数字を指定することで、ファイルの接尾辞の数字をデフォルトの2桁から変更することができます。

コマンド例と実行結果

 

 

 

エラー時にファイルを削除しない
(-kオプション)

csplitコマンドはエラーが起きた時に、分割したファイルを削除します。エラーが起きた時にファイルを削除しないようにするには、-kオプションを用いる必要があります。

コマンド例と実行結果

 

 

 

空ファイルを作成しない
(-zオプション)

パターンによっては、csplitコマンドはからファイルを作成する場合があります。

-zオプションを用いると空ファイルを作成しません。

コマンド例と実行結果

 

 

 

パターンにマッチした行を出力しない
(--suppress-matchedオプション)

--suppress-matchedオプションは、csplitコマンドでパターンにマッチした行を分割したファイルに含めません。

コマンド例と実行結果

 

 

 

参考

GNU Coreutils: csplit invocation