Bash
如何拆分,為每個拆分和 gzip 文件添加文本
我想獲取一個巨大的文件
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 拆分為單獨的命令的情況下執行此操作,從而將文件寫入磁碟。
您可以使過濾器更複雜:
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
確保拆分文件包含完整記錄。