Cómo obtener algunas líneas de un archivo comprimido .gz sin descomprimir

89

¿Cómo obtener las primeras líneas de un archivo gziped? Intenté zcat, pero arroja un error

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Govind Kailas
fuente

Respuestas:

149

zcat(1)puede ser suministrado por cualquiera compress(1)o por gzip(1). En su sistema, parece estar compress(1): está buscando un archivo con una .Zextensión.

Cambie a gzip -cden lugar de zcaty su comando debería funcionar bien:

 gzip -cd CONN.20111109.0057.gz | head

Explicación

   -c --stdout --to-stdout
          Write output on standard output; keep original files unchanged.  If there are several input files, the output consists of a sequence of independently compressed members. To obtain better compression, concatenate all input files before compressing
          them.

   -d --decompress --uncompress
          Decompress.
sarnold
fuente
7
Por cierto, si estás sentado con un * .tar.gz, esto te ayudará: tar -xzOf some_huge_file.tar.gz | head
demaniak
Hilo antiguo, pero esto produce una tubería rota con estado de salida 1 con archivos gz grandes. ¿Alguna solución limpia?
Kaligne
2
La mejor y más fácil solución alternativa que he encontrado hasta ahora: use zless file.gz | head. zmoretodavía te deja con la tubería rota. zlessparece ser el camino a seguir.
Kaligne
zless no sale ... al menos no en mi archivo grande. Todavía estoy buscando una manera de hacer esto sin errores de tubería rota ...
Freek
14

En algunos sistemas (por ejemplo, Mac), es necesario utilizar gzcat.

Marcelo Cantos
fuente
11

En una mac, debe usar <con zcat:

zcat < CONN.20111109.0057.gz|head

punkrockpolly
fuente
2

Si se necesita un rango continuo de líneas , una opción podría ser:

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

donde las líneas entre las líneas 5 y 10 (ambas inclusive) de file.gzse extraen en un nuevo subFile. Para conocer las sedopciones, consulte el manual .

Si se requiere cada, digamos, la quinta línea :

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

que extrae la 1ª línea y salta 4 líneas y elige la 5ª línea y así sucesivamente.

Ingeniero libre de herpes
fuente
0

Este fragmento de awk le permitirá mostrar no solo las primeras líneas, sino un rango que puede especificar. También agregará los números de línea que necesitaba para depurar un mensaje de error que apunta a una cierta línea hacia abajo en un archivo comprimido con gzip.

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

Aquí está el fragmento de awk que se usa en la línea anterior. En awk NR es una variable incorporada (Número de registros encontrados hasta ahora) que generalmente es equivalente a un número de línea. las variables desde y hasta se recogen de la línea de comandos mediante las opciones -v.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
Wolfgang Fahl
fuente