- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ログファイルを後ろから検索し、最初のマッチで止める)
ログファイルを効率的に後ろから検索する方法は?
このQ&Aのポイント
- CentOS 5を使用している場合、巨大なログファイルを効率的に後ろから検索する方法はありますか?現在はログファイルを全検索しており、効率が悪いと感じています。
- tacコマンドを使用してログファイルを逆順に表示し、grepコマンドで検索していますが、最初のマッチで終了してくれるオプションがないため、効率的ではありません。
- 効率的な方法を教えていただけないでしょうか?rubyなどのスクリプトを使用しても構いませんが、なるべくワンライナーでの実現方法を知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> grep で「最初のマッチで終了」してくれるオプションもなさそうです。 mオプションがそうではないでしょうか。 http://linuxjm.sourceforge.jp/html/GNU_grep/man1/grep.1.html
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
その「ログファイル」の構成とか「どのくらい高速化することを想定しているのか」にもよりそうだけど, 普通のログファイルなら劇的な高速化はできないと思う. どう頑張っても「ファイルを最後まで読み込む」より速くはならないし, grep がそれより極端に遅いとは思えない. 「100秒かかっているのが 99秒になる」くらいの高速化はできるかもしれんけど.
質問者
補足
説明不足でした。 単純にマッチ行がファイルの先頭付近なのか最後の方なのかで効率は変わります。 仮に先頭付近だった場合、最初の数行でマッチし、そこで処理を終了させればよいので、かなりの効率化になりますよね。 最後の方にあればしょうがないですね。 いづれにせよ、マッチした時点で grep が終了してくれれば良いです。(-l オプションは終了してくれるがマッチ行を出力しない)
お礼
使用しているOSが古い(RHEL3)せいか -m オプションはありませんでした orz 特に困っているわけではないので大丈夫です。 スッキリしました。ありがとうございます。
補足
おぉっ!なるほど、そんな感じですね。 時間見つけて試してみます。これで一応 tac コマンド + grep で目的は達成できそうですね。 ただし、-A や -B オプションを使っているので表示は逆になりますが・・・あっ、また tac すれば良いのか! tac biglog.txt | grep -m 1 -A 2 -B 1 hoge | tac 結果は報告するようにします。