行以外のファイルの最後のNバイトをtail / grep / awkする方法

行以外のファイルの最後のNバイトをtail / grep / awkする方法

プレーンテキストログファイル(myapp.log)にログを記録するアプリケーションがありますが、各ログエントリの末尾に改行文字を書き込んでいないようです。コマンドを実行すると、tail -n 50 myapp.log文字通り何百もの「行」テキスト(ログエントリ)を受け取るのと同じです。

このログファイルは約1 GBと非常に大きく、最後のCRおよび/またはLFが挿入されているかどれほど古いかを知っていません。たとえば、最後の2MBをどのように取得できますか?

ベストアンサー1

スイッチを使用する-c(2MB = 2 * 1024 * 1024 = 2097152バイト):

tail -c 2097152 myapp.log

ありがとうピーター・ウーザー提案。一部のテール実装では、最後のキロバイト(k)またはメガバイト(m)を印刷する単位を追加できます。たとえば、次のようになります。

tail -c 2m myapp.log

ただし、これは標準ではなく(POSIX、UNIX(SUS)、またはLinux(LSB)でも)移植性はありません。また、「Mega」/「kilo」...と略語(M、k ...)という用語は意味が不明であるため(1000対1024)、この実装またはその実装が何を意味するのかを保証することはtailできません2m(サポートは可能ですが)。現在の実装の現在のバージョンは1024バリアントで動作しているようです。

おすすめ記事