tubería para dividir use gunzip -c o zcat para abrir el archivo
gunzip -c bigfile.gz | split -l 400000
Agregue especificaciones de salida al comando de división.
La mejor forma de hacerlo depende de lo que quieras:
- ¿Desea extraer una sola parte del archivo grande?
- ¿O quieres crear todas las partes de una sola vez?
Si desea una parte única del archivo , tu idea para usar gunzip
y head
es correcto. Puedes usar:
gunzip -c hugefile.txt.gz | head -n 4000000
Eso generaría las primeras 4000000 líneas en la salida estándar; probablemente desee agregar otra canalización para hacer algo con los datos.
Para obtener las otras partes, usaría una combinación de head
y tail
, como:
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
para obtener el segundo bloque.
¿Quizás hacer una serie de estos es una solución o el gunzip requeriría suficiente espacio para descomprimir todo el archivo?
No, el gunzip -c
no requiere espacio en disco:hace todo en la memoria y luego lo transmite a la salida estándar.
Si desea crear todas las partes de una sola vez , es más eficiente crearlos todos con un solo comando, porque entonces el archivo de entrada solo se lee una vez. Una buena solución es usar split
; vea la respuesta de jim mcnamara para más detalles.
Como está trabajando en una transmisión (no rebobinable), querrá usar la forma de cola '+N' para obtener líneas que comiencen desde la línea N en adelante.
zcat hugefile.txt.gz | head -n 40000000
zcat hugefile.txt.gz | tail -n +40000001 | head -n 40000000
zcat hugefile.txt.gz | tail -n +80000001 | head -n 40000000