2016-12-29 12 views
-1

私は解析をログに記録するのが初めてであるので、助けが必要です。私は200のステータスを持つすべてのログ行を抽出しようとしています。15:35までに15時間のタイムスタンプがあります。私は使用される正規表現を把握することができません。nginxログのタイムスタンプの解析

198.104.78.160 [26/DEC/2016:15:24:12 -0500] 200 190.50.175.65:8080 200 testtest.com GET/API /ここ

ログのサンプルでありますbid_request?feed = 1 & auth = qwerty & ip = 85.194.119.3 & ua = Mozilla%2F5.0 +%28Windows + NT + 6.1%3B + Win64%3B + x64%29 + AppleWebKit%2F537.36 +%28KHTML% 2C + like + Gecko%29 + Chrome%2F48.0.2564.97 + Safari%2F537.36 & lang = tr-TR%2Ctr%3Bq%3D0.8%2Cen-US%3Bq%3D0.6%2Cen%3Bq% HTTP/1.0 - - - 174.194.36.141 - 0.109-0.009 US /

答えて

1

あなたはそれを行うためにawkを使用することができます。

awk -v status_code=200 -v ts_at_hour=15 -v ts_before_hour=15 -v ts_before_min=35 ' 

    { 
     match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s+\[[0-9]{2}\/[a-zA-Z]{3}\/[0-9]{4}:([0-9]{2}):([0-9]{2}):([0-9]{2})\s+[+-][0-9]{4}\]\s+([0-9]{3})/, items) 

     if (items[1] == ts_at_hour && 
      items[1] <= ts_before_hour && 
      items[2] < ts_before_min && 
      items[4] == status_code){ 
      print $0 
     } 
    } 
' data.txt 

は、いくつかの要件status_codeを格納する変数、ts_at_hourts_before_hourts_before_minを設定します(あなたは環境が彼らにvarsの定義することができます)

正規表現は、([0-9]{2})で定義された時、分、秒、末尾のstatus_codeの4つのグループに焦点を当てたmatchです。([0-9]{3}) 正規表現を分解するために、あなたは持っている:

  • スペース\s+(またはそれ以上)の時、分、秒\[[0-9]{2}\/[a-zA-Z]{3}\/[0-9]{4}:([0-9]{2}):([0-9]{2}):([0-9]{2})\s+[+-][0-9]{4}\](間の3グループに気づくが含ま
  • 日付部分に続いてIPアドレス[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+()
  • ステータスコード:([0-9]{3})