.txtファイルの内容を複数のファイルに分割したいのですが、csplitの制限に関しては2つの問題が発生します。
(1)誰でもcsplit '99'ファイル分割の最大制限を解決する方法を提供できますか?私のファイルには、繰り返される空白行または文字に基づいて最大384個の分割が含まれています。 csplitは{*}を使用してそれを受け入れることができたらと思いますが、これはcsplitの独自のファイル生成機能を超えています。
(2)ファイルの内容をcsplit(パイプからcsplitに)に渡す方法を知っている人はいますか?それとも、csplitをファイルを呼び出す伝統的な方法でのみ使用できますか?csplit -f split_name file_to_split.txt /split/ {*}
つまり[series of commands] | csplit -f split_name /split/ {*}
同様の作業を行うための提案や代替案を提供していただきありがとうございます。
答え1
マイケル・ホーマーが言ったように、すべてのPOSIX準拠のcsplitは99を超えるファイルをインポートできますが、この-n
オプションを渡す必要があります。
csplit -n 3 file_to_split.txt
つまり、GNUバージョンのcsplitを使用して簡単に実行できますが、FreeBSD / OSXバージョンでは実行できないことがある場合は、GNUバージョン(GNU coreutilsの一部)をインストールできます。 GNU coreutilsはさまざまなソースからインストールできますが、最も人気のあるソースは次のとおりです。自家製。また、見ることができますMac OS XユーティリティをGNUコアユーティリティに置き換えるには?。
あるいは、csplitが実行するほとんどのタスクをawkの数行で実装することができ、出力ファイル名などに柔軟性を高めます。次のコードスニペットは標準入力から読み込み、行を背中に書き込みます。part-000.txt
行part-001.txt
が含まれるたびにファイルを変更しますheader-line
。
awk '
/header-line/ {
++part;
if (output_file) close(output_file);
output_file=sprintf("part-%03d.txt", part)
}
{print >output_file}
'