Bash

如何拆分,為每個拆分和 gzip 文件添加文本

  • August 23, 2021

我想獲取一個巨大的文件data.txt並且:

  1. 將其分割為 256m
  2. 將前 3 行添加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 拆分為單獨的命令的情況下執行此操作,從而將文件寫入磁碟。

您可以使過濾器更複雜:

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確保拆分文件包含完整記錄。

引用自:https://unix.stackexchange.com/questions/665899