6

我在一个磁盘空间有限的共享服务器上,我有一个 gz 文件,它超级扩展成一个巨大的文件,比我所拥有的要多。如何通过“部分”提取它“部分”(让我们说一次 10 MB),并处理每个部分,甚至暂时不提取整个内容!

不,这只是一个超大压缩文件,请不要一组文件...


嗨大卫,你的解决方案看起来很优雅,但如果我准备好了,似乎每次 gunzip 从文件的开头提取(并且输出被丢弃)。我确信这会对我所在的共享服务器造成巨大压力(我认为它根本不是“预读”) - 你对我如何让 gunzip“跳过”必要的数字有任何见解吗?块?

4

2 回答 2

13

如果您使用 (Unix/Linux) shell 工具执行此操作,您可以使用gunzip -c解压缩到标准输出,然后使用ddandskip选项count仅复制一个块。

例如:

gunzip -c input.gz | dd bs=10485760 skip=0 count=1 >output

然后跳过=1,跳过=2,等等。

于 2010-05-07T04:14:37.493 回答
1

不幸的是,我不知道现有的 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的一百万字节,跳过未压缩流中的前 4 百万字节。

于 2010-05-07T04:12:09.537 回答