正規表現を使用して Oracle トレース ファイルを解析しようとしています。私が選んだ言語は C# ですが、この演習では Ruby に慣れるために Ruby を使用することにしました。
ログ ファイルはある程度予測可能です。ほとんどの行 (具体的には 99.8%) は、次のパターンに一致します。
# [Timestamp] [Thread] [Event] [Message]
# TIME:2010/08/25-12:00:01:945 TID: a2c (VERSION) Managed Assembly version: 2.102.2.20
# TIME:2010/08/25-14:00:02:398 TID:1a60 OpsSqlPrepare2(): SELECT * FROM MyTable
line_regex = /^TIME:(\S+)\s+TID:\s*(\S+)\s+(\S+)\s+(.*)$/
ただし、ログのいくつかの場所では、何らかの理由で複数の行にまたがる複雑なクエリが多数あります。
これらのエントリについて注意すべき点が 2 つあります。これは、ログ ファイルが何らかの破損を引き起こしているように見えることです。これは、出力できない文字で終了し、突然次のエントリが同じ行で始まるためです。
これは明らかに行ごとにデータをキャプチャすることを除外しているため、次善の策は「TIME:」という単語と「TIME:」の次のインスタンスまたはファイルの終わりの間のすべてを一致させることだと思います。これを正規表現で表現する方法がわかりません。
より効率的なアプローチはありますか?解析する必要があるログ ファイルは 1.5 GB を超えます。私の意図は、行を正規化し、不要な行を削除して、最終的にクエリ用のデータベースに行として挿入することです。
ありがとう!