巨大なログファイルの最後の数行を読む方法は?

巨大なログファイルの最後の数行を読む方法は?

ログサイズは55GBです。

私は試した:

cat logfile.log | tail

しかし、この方法は時間がかかります。大容量ファイルをより高速に読み取る方法や他の方法はありますか?

ベストアンサー1

cat logifle.log | …これは重複し、実際には速度低下を引き起こす。tail logfile.log猫がいなければもっと意味があると思います!

はるかに速いから入力にならないとき閲覧可能tail実行する必要があるのは、すべてのstdinを1行ずつ読み、最後の10行をバッファに保持することです。最後行10)入力がメカニズムをcat介してパイプから出るようにすると、その入力を取得できません。

これは遅く、ファイルの行サイズがGBでない限り、非常に愚かです。最初の54.9GBをスキップしてください。残りの100MBは確かに最後の10行より少なくはありません! 100MBから最後の10行を取得するだけでも十分高速です。

tail --bytes 100M logfile.log | tail

しかし、GNU Coreutil1実装を使用している場合は、tailすでにこれを行っています(つまり、ファイルの終わりから2.5kBを引いた部分を見つけてそこから探し始めます)。渡すいいえここで乱用するcatが、tailファイル自体を読むようにしておくか、リダイレクトを使用すると、効果は同じです!より速い結果が得られます。


tail1 GNU Coreutils、最新のbusyboxは私が確認した2つの実装です。 Stéphaneは、以下からオリジナルも同様であると指摘しています。1970年代のPWB Unixの実装完了しました。しかし、まだ実装の詳細にすぎません。

おすすめ記事