私は大容量ファイルが欲しいと思いますdata.txt
:
- 256mに分かれている
data.txt
各分割ファイルに最初の3行を追加します。- 圧縮する
data.txt
良い:
aaa
bbb
ccc
<data>
<data>
<data>
...
<few million rows>
<data>
最終結果は、各分割ファイルが同じ最初の3行を持つことです。
aaa
bbb
ccc
私が知っている最も効率的な方法はメモリにあります。ステップ2を終了すると、次のようになります。
split --bytes=256M -d -a 3 --filter='gzip > $FILE.gz' data.txt split/data_
しかし、手順2では、ファイルをディスクに書き込むためにgzipを別のコマンドに分割せずにこれを行う方法がわかりません。
答え1
フィルタをより複雑にすることができます。
split -C 256M -d -a 3 --filter '(head -n 3 data.txt; cat) | gzip > $FILE.gz' <(tail -n +4 data.txt) data_
これにより、最初の3行がスキップされ、data.txt
各分割に再導入されます。
-C
代わりに、--bytes
分割ファイルにレコード全体が含まれていることを確認するために使用します。