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: gzip ファイルのサイズが大きくなるにつれて 末尾 ( -t) または連続した末尾 ( ) を作成できるコマンドライン ツールを開発しました。(他の多くのオプションも使用可能):-Thttps://github.com/circulosmeos/gztool

あなたの場合: $ gztool -t myfile.gz | tail -1

これらのアクションのいずれの場合も、gztoolそのアクションとインターリーブされた小さな (<1%/gzip) インデックス ファイルが作成されることに注意してください。この利点は、ファイルが再度完全に解凍されないため、そのファイルの次のすべての「末尾」または抽出で時間や CPU がほとんど消費されないことです。

関連情報