1

ファイルからログを抽出しようとしています。パターンに一致し、タイムスタンプが過去 24 時間以内であるすべてのエントリが必要です。

私のログは次のようになります。

2014-07-01 01:15:59,486 WARN 86c9c59c-c362-48d5-bd8c-fb4c8b616f5a 169.179.101.7 CITIKYC_164283 stence.audit.support.impl.AuditUtilsImpl: 274 - 監査の更新が成功しました

2014-07-01 01:15:59,487 WARN 86c9c59c-c362-48d5-bd8c-fb4c8b616f5a 169.179.101.7 CITIKYC_164283 stence.audit.support.impl.AuditUtilsImpl: 173 - 登録の重複、スキップ...

2014-07-01 01:15:59,488 何とか何とか..

これまでのところ、前日のログを取得しています

D=$(date +"%Y-%m-%d" -d "-1 days")
cat citikyc.log | awk '/'$D' /, /'$D' / { print $0 }' | grep "Exception\|at.*\.java\:.*" | mail -s "TESTING" xxx@yyy.com

過去 24 時間のログの取得にご協力ください。

前もって感謝します...!!

4

2 に答える 2

4

このワンライナーを試してみてください:

awk -v d="$(date -d'24 hours ago' +'%F %T,000')" '$1" "$2>=d &&/YourSearch/' log

私はテストしませんでした。タイプミスがないことを願っています。

現在から24時間前のタイムスタンプが表示されdate -d'24 hours ago' +'%F %T,000'ます。

YourSearch検索パターン (正規表現) です。

テストを追加して、それがどのように機能したかを示します。

#this is my current time
kent$  date +'%F %T'
2014-07-02 15:27:46

#file content, so only last 3 lines are in "last 24 hours"
kent$  cat f
2014-06-01 01:15:59,123 foo
2014-07-01 02:15:59,123 bar bar bar
2014-07-01 01:15:59,123 foo
2014-07-01 02:15:59,123 foo
2014-07-01 03:15:59,123 foo
2014-07-01 21:15:59,123 foo
2014-07-01 22:15:59,123 foo
2014-07-01 23:15:59,123 foo

#let's get them
kent$  awk -v d="$(date -d'24 hours ago' +'%F %T,000')" '$1" "$2>=d &&/foo/' f
2014-07-01 21:15:59,123 foo
2014-07-01 22:15:59,123 foo
2014-07-01 23:15:59,123 foo
于 2014-07-02T11:34:27.457 に答える
0

完全におかしい。
これはうまくいくはずです。
エポックに変換し、エポックの現在の時間に対してテストします。これは秒単位の精度です。

awk 'NF&&/yoursearch/{split($1,d,"-");split($2,t,":");epoch = mktime(d[1]" "d[2]" "d[3]" "t[1]" "t[2]" "t[3])}(systime()-epoch)<86400{print} ' log
于 2014-07-02T13:00:17.727 に答える