1

220MB の大きなファイルがあります。ファイルは、横の行「---」でグループ化されます。これは私がこれまでに持っているものです:

    cat test.list | awk -v ORS="" -v RS="-------------------------------------------------------------------------------" '{print $0;}'

これを取得して、1000 件の一致ごとに新しいファイルに出力するにはどうすればよいですか?

これを行う別の方法はありますか?私は分割と csplit を見ましたが、「----」行は予測どおりに発生しないため、それらを一致させてから、一致の数で分割する必要があります。

出力ファイルをファイルごとに 1000 の一致のグループにしたいと思います。

4

2 に答える 2

3

最初の 1000 レコードをoutputfile0、次のoutputfile1などに出力するには、次のようにします。

awk 'NR%1000 == 1{ file = "outputfile" i++ } { print > file }' ORS= RS=------ test.list

(簡単にするために、RS ではダッシュを切り捨てていることに注意してください。)

RS残念ながら、 1 文字以上の の値を使用すると、不特定の結果が生じるため、上記の方法では解決できません。おそらく、twalbergのソリューションのようなものが必要です:

awk '/^----$/ { if(!(c%1000)) count+=1; c+=1; next } 
    {print > ("outputfile"count)}' c=1 count=1
于 2012-12-06T22:20:29.567 に答える
1

テストされていませんが、これらの行に沿った何かが機能する可能性があります:

awk 'BEGIN {fileno=1,matchcount=0}
     /^-------/ { if (++matchcount == 1000) { ++fileno; matchcount=0; } }
                { print $0 > "output_file_" fileno }' < test.list

split.awkそれをすべて入れて、代わりに使用する方がきれいかもしれませんawk -f split.awk test.list...

于 2012-12-06T21:35:13.437 に答える