乱れたり壊れたログと正規表現

  • 投稿日:
  • by
  • カテゴリ:



簡単なんですがねぇ。


たとえばこんなログファイルをperlで自動的に処理したいとします。



geshigeshi


Process A Start No:123


hogehoge


Process A Start No:124


hunihuni



他に似たようなキーワードがないのなら、"Process A Start"をエディタで単純検索すれば良いだけです。


ですが、複数スレッドやプロセスが走り回るシステムでは、ログが混ざることがあります。



geshiProcess A Stageshirt No:123


Process A Shogehogetart Nhunihunio:124



こういう場合、目視と手作業で『なんとかする』のも良いですが、以下のような正規表現を使えばよいだけのことです。


秀丸エディタの場合だとgrepのダイアログでこんな感じに指定します。


f:id:syasuda:20091111230139p:image


検索文字列に正規表現で指定します。



P.*r.*o.*c.*e.*s.*s.* .*A.* .*S.*t.*a.*r.*t



こんな冗長な記述はいやだという人もいるかもしれませんがね。


結果はこんな感じ。


f:id:syasuda:20091111230138p:image


「別のログに同じ文字があったら破綻するんじゃないか。たとえばProcessのcを使う、changeとかがまざったら?」というような心配をする人もおられると思いますが、とにかく限界を体感するためにも試してみてほしいです。


とにかくこれで、まざったログの中からでも目的のキーワードを自動的に洗い出すことができます。


・・・と言いたいところなのですが、実はログが混ざると改行もまざりますので、行単位で処理するgrepでは限界があったりもします。その辺は今後の課題ということで。


行単位でまざらないようにすることは簡単で、あらゆるシステムに搭載されていますが、保存容量などの制限がつきまといます。


手にできる情報を生かすための方法は探せばいろいろあります。


ですが最初は手作業でもいいと思います。目と手が慣れれば効率10倍くらいの差は簡単につきますから。この手の改善はそこからせいぜい数倍です。