gunzip /提取文件“部分部分”
-
03-10-2019 - |
题
我在具有限制磁盘空间的共享服务器上,并且我有一个超级扩展到一个巨大文件的GZ文件,比我拥有的更多。如何通过“部分”(一次性地说10 MB)提取它,并处理每个部分,而无需暂时提取整个内容!
不,这只是一个超大的压缩文件,而不是一组文件。
嗨,大卫,您的解决方案看起来很优雅,但是如果我准备正确的问题,似乎每次Gunzip从文件开头提取时(以及将其输出丢弃)。我敢肯定,这会对我使用的共享服务器产生巨大的压力(我认为它的“阅读”根本不会) - 您对如何使Gunzip“跳过”必要的数字有任何见解块?
解决方案
如果您使用(UNIX/Linux)Shell工具执行此操作,则可以使用 gunzip -c
要解压缩到stdout,然后使用 dd
与 skip
和 count
仅复制一个块的选项。
例如:
gunzip -c input.gz | dd bs=10485760 skip=0 count=1 >output
然后跳过= 1,跳过= 2,等。
其他提示
不幸的是,我不知道现有的UNIX命令可以正是您需要的。您可以使用任何语言的小程序轻松地做到这一点,例如,在Python中, cutter.py
(当然,任何语言也会做得同样):
import sys
try:
size = int(sys.argv[1])
N = int(sys.argv[2])
except (IndexError, ValueError):
print>>sys.stderr, "Use: %s size N" % sys.argv[0]
sys.exit(2)
sys.stdin.seek((N-1) * size)
sys.stdout.write(sys.stdin.read(size))
现在 gunzip <huge.gz | python cutter.py 1000000 5 > fifthone
将归档 fifthone
恰好一百万个字节,跳过了未压缩流中的前400万字节。
不隶属于 StackOverflow