¿Cómo imprimir la última línea de un archivo comprimido gz en la línea de comando?

¿Cómo imprimir la última línea de un archivo comprimido gz en la línea de comando?

Tengo muchos archivos de registro comprimidos con gz que tienen nombres genéricos y necesito verificar el período de tiempo que reflejan. Sé sobre el zcat | head pero esto funciona solo para el comienzo del archivo.

¿Cómo puedo obtener la última línea sin descomprimir todo el archivo?

Respuesta1

Si desea líneas desde el final de un archivo en lugar del encabezado, use tailen lugar de head:

$ zcat /var/log/syslog.2.gz | tail -1
Aug 24 07:09:02 myhost rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="796" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

Respuesta2

FWIW: He desarrollado una herramienta de línea de comandos que puede crear una cola ( -t) o incluso una cola continua de un archivo gzip ( -T) a medida que crece. (Muchas otras opciones disponibles): https://github.com/circulosmeos/gztool

Entonces para tu caso: $ gztool -t myfile.gz | tail -1

Tenga en cuenta que para cualquiera de estas acciones gztoolse creará un pequeño archivo de índice (<1%/gzip) intercalado con esa acción.La ventaja de esto es que todas las siguientes "colas" o extracciones en ese archivo casi no consumirán tiempo/CPU ya que el archivo no se vuelve a descomprimir por completo.

información relacionada