GUNZIP / Extract文件“逐个部分”

时间:2010-05-07 03:56:47

标签: shell compression gzip gunzip

我在一个磁盘空间有限的共享服务器上,我有一个超级扩展为巨大文件的gz文件,比我的文件更多。如何通过“部分(一次说10 MB)提取”部分“,并处理每个部分,而不是暂时提取整个部分!

不,这只是一个超级巨大的压缩文件,而不是一组文件...


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

2 个答案:

答案 0 :(得分:11)

如果您使用(Unix / Linux)shell工具执行此操作,可以使用gunzip -c解压缩到stdout,然后将ddskip和{{1}一起使用}只复制一个块的选项。

例如:

count

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

答案 1 :(得分: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放入恰好一百万字节,跳过未压缩流中的前四百万字节。