Как распечатать последнюю строку сжатого gz-файла в командной строке?

Как распечатать последнюю строку сжатого gz-файла в командной строке?

У меня много сжатых gz-файлов журналов с общими именами, и мне нужно проверить период времени, который они отражают. Я знаю о zcat | head, но это работает только для начала файла.

Как мне получить только последнюю строку, не распаковывая весь файл?

решение1

Если вам нужны строки из конца файла, а не из его начала, используйте tailвместо 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

решение2

FWIW: Я разработал инструмент командной строки, который может создавать хвост ( -t) или даже непрерывный хвост gzip-файла ( -T) по мере его роста. (Доступно много других опций): https://github.com/circulosmeos/gztool

Итак, в вашем случае: $ gztool -t myfile.gz | tail -1

Обратите внимание, что для любого из этих действий gztoolбудет создан небольшой (<1%/gzip) индексный файл, перемежающийся с этим действием.Преимущество этого способа в том, что все последующие «хвосты» или извлечения из этого файла практически не будут потреблять время/ресурсы процессора, поскольку файл не распаковывается заново полностью!

Связанный контент