ホーム > テキスト処理・検索 > csplit

csplit: ファイル内容に基づいて分割

csplitコマンドは、ファイルの内容を特定のパターン(正規表現)または行番号に基づいて複数の小さなファイルに分割するために使用されます。大容量のログファイルやソースコードを特定のセクションごとに分割して分析または管理する場合に便利です。

概要

csplitは、入力ファイルを指定されたパターンまたは行番号に従って複数の出力ファイルに分割します。各出力ファイルは元のファイルの連続したセクションを含み、ファイル名は指定された接頭辞と数値サフィックスで構成されます。

主な特徴

  • 正規表現または行番号に基づく分割
  • 出力ファイル名の接頭辞および数値形式の指定が可能
  • 大容量ファイルの特定セクションの抽出と管理が容易

主なオプション

出力ファイル制御

分割動作の制御

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`csplit` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

行番号に基づいてファイルを分割

echo -e "$(seq 1 35)" > test.txt
csplit test.txt 10 20 30

test.txtファイルを10行目、20行目、30行目を基準に分割します。(例: xx00: 1-9行、xx01: 10-19行、xx02: 20-29行、xx03: 30行から最後まで)

正規表現に基づいてファイルを分割

echo -e "Line 1\nLine 2\nERROR: First error\nLine 4\nLine 5\nERROR: Second error\nLine 7" > log.txt
csplit -f part_ log.txt '/^ERROR:/' '{*}'

log.txtファイルを'^ERROR:'で始まる行を基準に分割し、ファイル接頭辞を 'part_' に指定します。'{*}' は残りのすべてを1つのファイルにまとめることを意味します。

接頭辞と桁数を指定して分割

echo -e "[Section 1]\nContent A\n[Section 2]\nContent B\n[Section 3]\nContent C" > data.log
csplit -f my_file_ -n 3 data.log '/^\[Section \d+\]/' '{*}'

data.logファイルを'[Section N]'パターンで分割し、ファイル名を 'my_file_000', 'my_file_001' のように生成します。

マッチした行を除外して分割

echo -e "Line 1\nERROR: First error\nLine 3\nERROR: Second error" > log.txt
csplit --suppress-match -f no_error_ log.txt '/^ERROR:/' '{*}'

log.txtファイルを'^ERROR:'パターンで分割しますが、'ERROR:'で始まる行は各分割ファイルに含めません。

ヒントと注意点

csplitコマンドは強力ですが、正規表現の使用には注意が必要です。

便利なヒント

  • 正規表現を使用する際は、シェルによる解釈を防ぐために引用符で囲んでください。
  • 分割基準となる行は、デフォルトでは次のファイルの最初の行になります。`--suppress-match`オプションでその行を除外できます。
  • '{*}' は残りのファイルをすべて1つのファイルにまとめることを意味します。このオプションがない場合、最後の分割基準以降の内容は破棄されます。

注意点

  • 元のファイルは変更されません: csplitは元のファイルを変更せず、新しい分割ファイルを生成します。
  • エラー処理: 正規表現が一致しない場合や行番号が無効な場合、エラーが発生する可能性があります。特に正規表現は正確に記述する必要があります。

同じカテゴリのコマンド