csplit(または同様のツール)を使用してファイルをn個のファイルに分割する

csplit(または同様のツール)を使用してファイルをn個のファイルに分割する

次のスキーマを持つ巨大なファイルがあります。

ABC
line 1
line 2
line 3
ABC
line 1
line 2
ABC
line1
ABC
line 1
line 3

ツールを使用して、上記のファイルをパターンに応じて4つのサブファイルに分割csplitできます。/ABC/

csplit -z input.txt /ABC/ {*}

必要な出力ファイルの数を手動で指定する方法を知りたいです。

ベストアンサー1

使用できますawk。正確に望むわけではありませんが、効果があるかもしれません。

アイデア:n行を部品ファイルとして印刷し、新しい部品ファイルを作成する前に、次のパターン発生を検索します。

欠点:

  • 大きなチャンクがあり、そのチャンクの先頭をスキップすると、一部のファイルが他のファイルよりもはるかに大きくなる可能性があります。
  • 元のファイルは削除されません(つまり、必要なスペースの2倍)。
  • 書かれているように、一致する行は正確でなければなりませんABC(同じ行の他の単語と比較して許容範囲はなく、調整可能)。
  • 必要な出力ファイルの数(入力ファイルの行数で推定)の代わりに行数を設定することで機能します。

akw- スクリプト

BEGIN{
    outfile="part_"++i
    j=0
    }
{ 
    j++
    #block size set to at least 10 lines in this example
    #if threshold line number reached: search for next keyword,
    #then increase part file name counter and reset line threshold counter
    if ( j>=10 && $0 == "ABC" ) { outfile="part_"++i ; j=0 }
    print > outfile
}

実行に合格しました。

awk -f script.awk input.txt

おすすめ記事