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

How to extract a portion (not beginning) of .gz file?

我有一个很大的 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

但 tail 命令只用了 10 分钟以上的时间来测试仅 50 行。

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

tail 不能处理二进制文件; tail -50 returns 最后 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。 将 space 限制为 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 过程都必须从存档文件的开头开始膨胀 由于压缩算法。