Назад | Перейти на главную страницу

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

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

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

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

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

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

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