如何提取.gz文件的一部分(不是开头)?

时间:2017-05-10 12:06:17

标签: bash compression gzip gz gunzip

我有一个大的gz文件(11 GB),我可以解压缩到我的电脑,甚至100GB免费。我用命令提取了前50 GB:

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt

我能够从文件的这一部分成功解析我的数据。现在我想提取要解析的文件的其他部分。我试图从文件中提取最后n行,然后按如下方式解压缩:

tail -50 file.gz > last_part_of_file.gz

我希望事后能够使用:

gzip -cd last_part_of_file.gz | dd ibs=1024 count=50000000 > last_50_GB_file.txt

但是尾部命令只需要10分钟就可以测试50行。

如果有人有任何关于如何提取(可能是任意的).gz文件中不包含开头的部分的解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:0)

tail不能使用二进制文件; tail -50返回最后50行,寻找' \ n' (char 10)分隔符。

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt

gzip -cd file.gz | dd ibs=1024 skip=50000000 > after_50_GB_file.txt

我首先提取的文件大小为100GB。 将空间限制为50GB

gzip -cd file.gz | dd ibs=1024 skip=50000000 count=50000000 > next_50-100_GB_file.txt

下一个50GB

gzip -cd file.gz | dd ibs=1024 skip=100000000 count=50000000 > next_100-150_GB_file.txt

但每次gzip进程必须从归档文件的开头膨胀 由于压缩算法。