.gz形式で圧縮された大容量ログファイルがありますが、解凍せずにファイルの最初の行を読み、ファイル内の最も古いログの日付のみを確認したいと思います。
ログ形式は次のとおりです。
YYYY-MM-DD Log content asnsenfvwen eaifnesinrng
YYYY-MM-DD Log content asnsenfvwen eaifnesinrng
YYYY-MM-DD Log content asnsenfvwen eaifnesinrng
最初の行の日付だけを読みたいです。圧縮されていないファイルの場合は、次のようにします。
read logdate otherstuff < logfile.gz
echo $logdate
zcatを使用すると時間がかかりすぎます。
ベストアンサー1
Pipingzcat
の出力は、head -n 1
最初の行を表示するのに十分であることを保証する少量のデータ圧縮を解きますが、一般的にいっぱいのバッファ数はいくつか(私の実験では96KiB)を超えません。
zcat logfile.gz | head -n 1
head
1行を読んだ後、入力を閉じてパイプを閉じてzcat
aを受け取り、それを停止しますSIGPIPE
(これは次に閉じたパイプに書き込もうとしたときに発生します)。これを実行すると見ることができます
(zcat logfile.gz; echo $? >&2) | head -n 1
(13 + 128)が原因で停止したことをzcat
示すコード141で終了します。SIGPIPE
後処理をさらに追加できます。例えばAWKを使用して日付のみを抽出します。
zcat logfile.gz | awk '{ print $1; exit }'
gzcat
(macOSでは処理する代わりにzcat
gzip圧縮を使用することもできます。)