行ではなく、ファイルの最後のNバイトをtail / grep / awkする方法


13

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

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

回答:


26

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

tail -c 2097152 myapp.log

提案してくれたPetr Uzelに感謝します。一部のテール実装では、次のように、最後のキロバイト(k)またはメガバイト(m)を出力するユニットを追加できます。

tail -c 2m myapp.log

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


5
Tailはcスイッチの引数として単位を持つ数値を受け入れることができるので、動作するtail -c 2M myapp.logはずです。
ペトルウーゼル

@PetrUzel:ありがとう。回答を編集して追加しました。
ビレイ

今、私は愚かに感じます:)迅速さのおかげで、本当に感謝します。素晴らしい提案!
jwbensley

1
:これは役立ちますが、それは私がここで取得するために探していたキーワードだったものだから、私はこのテキスト文字列を追加しますならばパーフェクトは、わからない(良いしばらくかかりました)2つのバイト位置(いない行)との間で、」猫のファイルデータを"
14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.