GUNZIP / часть “файла Извлечения частью”

Я нахожусь на общем сервере с ограниченным дисковым пространством, и у меня есть gz файл, который супер расширяется в ОГРОМНЫЙ файл, больше, чем, что я имею. То, как может я извлекать его "часть" "частью (позволяет, говорят, что 10 МБ за один раз), и обрабатывают каждую часть, не извлекая все это даже временно!

Нет, это - всего ОДИН супер огромный сжатый файл, не ряд файлов...


Привет David, Ваше решение выглядит довольно изящным, но если я подготавливаю его право, оно походит каждый раз gunzip на извлечения с начала файла (и вывод того, который выброшен). Я уверен, что это будет вызывать огромную деформацию на общем сервере, я иду (я не думаю его "чтение вперед" вообще) - у Вас есть какое-либо понимание о том, как я могу заставить gunzip "пропустить" необходимое количество блоков?

5
задан Dave 7 May 2010 в 05:53
поделиться

2 ответа

Если вы делаете это средствами оболочки (Unix/Linux), вы можете использовать gunzip -c для распаковки в stdout, затем использовать dd с опциями skip и count для копирования только одного куска.

Например:

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

затем skip=1, skip=2 и т.д.

11
ответ дан 13 December 2019 в 05:31
поделиться

К сожалению, я не знаю ни одной существующей команды 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 Fridayone поместит в файл Fridayone ровно миллион байтов, пропуская первые 4 миллиона байтов в несжатом потоке.

1
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: