У меня много файлов журналов, сжатых с помощью 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) индексный файл, чередующийся с этим действием. Преимущество этого заключается в том, что все последующие «хвосты» или извлечения в этом файле почти не потребуют времени / ЦП, поскольку файл не распаковывается полностью снова!