Pregunta

Estoy en un servidor compartido con el espacio de disco restringido y tengo un archivo gz que Super expande en un archivo enorme, más de lo que tengo. ¿Cómo puedo extraer que "parte" por "parte (10 MB que permite decir a la vez), y procesar cada porción, sin necesidad de extraer toda la cosa, aunque sea temporalmente!

No, esto es sólo una súper enorme archivo comprimido, no un conjunto de archivos de complacer ...


Hola David, su apariencia solución muy elegante, pero si estoy preparando bien, parece que cada vez que los extractos gunzip desde el principio del archivo (y la salida de ese día es el vertedero). Estoy seguro de que va a ser la causa de una gran tensión en el servidor compartido estoy en (no creo que su "lectura por delante" en absoluto) - ¿tienes ideas sobre cómo puedo hacer gunzip "salto" el número necesario de bloques?

¿Fue útil?

Solución

Si usted está haciendo esto con (Unix / Linux) herramientas de concha, se puede utilizar para descomprimir gunzip -c a la salida estándar, a continuación, utilizar dd con las opciones skip y count para copiar un solo trozo.

Por ejemplo:

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

entonces salte = 1, omita = 2, etc.

Otros consejos

Por desgracia no sé de un comando existente Unix que hace exactamente lo que necesita. Usted podría hacerlo fácilmente con un pequeño programa en cualquier idioma, por ejemplo, en Python, cutter.py (cualquier idioma haría igual de bien, por supuesto):

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))

Ahora gunzip <huge.gz | python cutter.py 1000000 5 > fifthone pondrá en fifthone archivo exactamente un millón de bytes, omitiendo los primeros 4 millones de bytes en el flujo sin comprimir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top