我想要一个巨大的文件data.txt
并且:
- 分割256m
- 将前 3 行添加
data.txt
到每个拆分文件 - 压缩它
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_
这会跳过 的前三行data.txt
,然后将它们重新引入到每个分割部分中。
我使用-C
而不是--bytes
确保拆分文件包含完整记录。