
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 tail
en 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 gztool
se 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.