bash - 如何提取 .gz 文件的一部分(非开头)?

标签 bash compression gzip gunzip

我有一个很大的 gz 文件 (11 GB),即使有 100 GB 可用空间也无法解压到我的计算机上。我已使用以下命令提取了前 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 命令仅测试 50 行就需要 10 分钟以上。

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

最佳答案

tail 无法处理二进制文件; tail -50 返回查找“\n”(字符 10)分隔符的最后 50 行。

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 进程都必须从存档文件的开头膨胀 由于压缩算法。

关于bash - 如何提取 .gz 文件的一部分(非开头)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892028/

相关文章:

regex - 使用 sed 删除两个空格字符之间的字符串

Tomcat JSR356 Websocket - 禁用 permessage-deflate 压缩

compression - 计算理论文本文件的大小

java - java中有没有什么压缩方法可以减少字符串中的字符数?

bash - 如何在whiptail中循环case语句

python - 从 python 在后台运行 "linux" sleep

python - 如何使用cherrypy在 Bottle 中启用gzip压缩

json - 启用 mod_deflate 时,Apache 2.4.7 未发送 304 响应

Bash/WSL - 如何以 root 身份运行命令?

javascript - Express gzip 压缩问题