[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
csplit
: ファイルを内容を目印にして分割する。csplit
は、入力ファイル input を分割して 0 個以上の出力ファイルを生成する。
input が ‘-’ である場合は、標準入力から読み込む。
書式:
csplit [option]… input pattern… |
出力ファイルの中身がどうなるかは、以下で詳しく述べるように、引数 pattern によって決まってくる。引数 pattern が、 入力ファイル中に存在しない行を指している場合は、エラーになる (たとえば、入力の残りの部分に、指定された正規表現にマッチする行がもう存在しない場合)。 すべてのパターン・マッチが終わったとき、残っている入力があれば、 最後の出力ファイルに書き出される。
デフォルトでは、csplit
は、出力ファイルを生成した後で、
各出力ファイルに書き込んだバイト数を表示する。
パターン引数 pattern には、以下のタイプがある。
入力の最初から n 行目の直前までを含む (つまり、n-1 行目までの) 出力ファイルを作成する (n は正の整数)。繰り返し回数の指定が後に続く場合は、 繰り返しごとに、入力ファイルの次の n 行分を含む出力ファイルを作成していく。 (訳注: パターンが N の場合は、あと何回繰り返すかを正確かつ具体的に指定しなければならない。 すなわち、回数が多かったり、{*} を指定すると、‘-k’ も指定しないかぎり、 エラーになり、出力ファイルが作成されない。)
現在行から、入力ファイル中の次に regexp にマッチする行の直前までを内容とする (すなわち、マッチする行は含まない) 出力ファイルを作成する。 整数の offset を指定してもよい。指定した場合は、マッチする行にプラス/マイナス offset した行の直前までの入力が (つまり、その行は含まない)、 出力ファイルに書き込まれ、書き込まれた次の行から入力の後続部分が始まることになる。
上記のタイプと同様だが、出力ファイルを作成しない点が異なる。 要するに、入力ファイルのその部分は捨てられることになるわけだ。
直前に行ったパターンの検索を、さらに repeat-count 回繰り返す。 repeat-count には正の整数か、アステリスクを指定できる。後者は、 入力がなくなるまで、必要なだけ何回でも繰り返すことを意味する。 (訳注: ‘csplit input '/pattern_1/' '{3}' '/pattern_2/' '{*}'’ のように使用する。)
出力ファイルの名前は、接頭辞 (prefix、デフォルトでは ‘xx’) に接尾辞 (suffix) を続けたものになる。デフォルトの接尾辞は、二桁の 10 進数を ‘00’ から ‘99’ まで順番に増やして行ったものである。いかなる場合でも、 出力ファイルを、ファイルの名前によってソートした順番で結合すると、 元の入力ファイルが生成されるようになっている。
csplit
のデフォルトでは、エラーになった場合や、ハングアップ、
割り込み、中止、終了といったシグナルを受け取った場合には、
それまでに作成した出力ファイルをすべて消去してから終了する。
このプログラムでは以下のオプションが使用できる。参照: 共通オプション.
prefix を出力ファイル名の接頭辞として使用する。
format を出力ファイル名の接尾辞として使用する。
このオプションを指定する場合、接尾辞として指定する文字列には、printf(3)
方式の変換指定が必ず一つは (それも、一つだけ) 含まれていなければならない。
変換指定には、形式指定フラグ、フィールド幅、精度指定といった修飾子を付けてもよく、
3 種の修飾子をすべて付けることもできる。
フォーマット文字は、バイナリの符号なし整数である引数を、
人間に読みやすい形式に変換するものでなければならない。フォーマット文字の
‘d’ と ‘i’ は、‘u’ の別名であり、‘u’, ‘o’,
‘x’, ‘X’ 変換が可能である。format の全体が
(現在の出力ファイルが何番目かという情報とともに) sprintf(3)
関数に引き渡され、出力ファイルの一つ一つに対して、ファイル名に使う接尾辞が順番に作られることになる。
なお、このオプションを使用すると、‘--digits’ オプションは無視される。
出力ファイル名に含まれる数字の桁数を、デフォルトの 2 桁から digits 桁にする。
エラーが起きても、出力ファイルを消去しない。
指定した pattern にマッチする行を出力しない。言い換えれば、 境界になる行が、分割されたファイルの 2 番目以降の断片の先頭に現れないようにする。 (訳注: pattern が正規表現の場合には、境界になる行がファイル中にたとえ 1 箇所しかなくても、 その行の表示を抑制するには、‘csplit --suppress-matched input pattern '{*}'’ などと、繰り返しの指定をする必要があるようだ。)
サイズ 0 の出力ファイルができないようにする (入力ファイルを各部分に区切る行が、 どの部分においても最初の行になることを期待している場合に、 このオプションを使わないと、一番目の出力ファイルがたいていサイズ 0 になる)。 このオプションが指定されているときでも、出力ファイルの連続番号が 0 から始まって、 順番に増えていくことに変わりはない。
出力ファイルのサイズを表示しない。
終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。
用例を挙げてみよう。まず、練習用に空のディレクトリを作って、そこに移動する。
$ mkdir d && cd d |
次に、1 から 14 まで連続する数を、0 または 5 で終わる行で分割する。
$ seq 14 | csplit - '/[05]$/' '{*}' 8 10 15 |
ここで表示された各数字は、csplit が今作成した出力ファイルのサイズである。 その出力ファイルの名前をリストする。
$ ls xx00 xx01 xx02 |
head
を使って、内容を見る。
$ head xx* ==> xx00 <== 1 2 3 4 ==> xx01 <== 5 6 7 8 9 ==> xx02 <== 10 11 12 13 14 |
次の例では、入力を空行で分割している。
$ csplit --suppress-matched input.txt '/^$/' '{*}' |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on June 7, 2022 using texi2html 1.82.