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