
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 tail
em 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 gztool
será 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!