Como imprimir a última linha de um arquivo compactado gz na linha de comando?

Como imprimir a última linha de um arquivo compactado gz na linha de comando?

Eu tenho muitos arquivos de log compactados gz que possuem nomes genéricos e preciso verificar o período de tempo que eles refletem. Eu sei sobre o zcat | head, mas isso funciona apenas no início do arquivo.

Como posso obter a última linha sem descompactar o arquivo inteiro?

Responder1

Se você quiser linhas do final de um arquivo em vez do final, use tailem vez 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

Responder2

FWIW: Desenvolvi uma ferramenta de linha de comando que pode criar uma cauda ( -t) ou até mesmo uma cauda contínua de um arquivo gzip ( -T) à medida que ele cresce. (Muitas outras opções disponíveis): https://github.com/circulosmeos/gztool

Então, para o seu caso: $ gztool -t myfile.gz | tail -1

Observe que para qualquer uma dessas ações gztoolserá criado um pequeno arquivo de índice (<1%/gzip) intercalado com essa ação.A vantagem disso é que todas as próximas "caudas" ou extrações nesse arquivo consumirão quase nenhum tempo/cpu, pois o arquivo não será descompactado completamente novamente!

informação relacionada