2016-11-07 27 views
0

我想在使用awk的日誌文件中查找最近5分鐘內出現的字符串。 我正在嘗試的命令是在linux中定製日誌記錄器中獲取日期差異

awk -v d1="$(date --date="-5 min" "+%b %_d %H:%M")" -v d2="$(date "+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /tmp/CustomService.log | grep -ci "IAM-548792" 

但是,這並沒有迴應輸出。

含量的日誌文件看起來像這樣

2016-11-07 16:08:05 DEBUG Service - Request: Started 
2016-11-07 16:08:05 DEBUG Service - ########## 
2016-11-07 16:08:05 DEBUG Service - Response: Completed at Mon 2016.11.07 at 04:08:05 PM EST 
2016-11-07 16:08:05 DEBUG Service - IAM-548792. Internal Error 

我認爲問題是我的日誌有不同的時間戳比默認的日期命令Linux使用。這是造成問題嗎?

我開始使用awk命令。感謝你的幫助。

+0

你會想'日期...... 「+%Y-%間%d%H:%M:%S」 '以匹配日期格式。有些系統具有shorthands:'date「+%F%T」' –

回答

0

我會寫什麼:

read date time < <(date -d "5 mins ago" "+%F %T") 
awk -v d="$date" -v t="$time" '$1 == d && $2 >= t' file 
0

awk解決方案:

awk 'BEGIN { t = systime() - 300;} # set t to 5 minutes less than now 
    {gsub("-", " ", $1);   # remove - from $1 to get YYYY MM DD 
     gsub(":", " ", $2);   # remove : from $2 to get HH MM SS 
     d = $1" "$2 }     # datespec format YYYY MM DD HH MM SS 
     mktime(d) > t '    # convert datespec to seconds, compare and print 

一個內膽:

awk -v secs=300 'BEGIN { t = systime() - secs} {gsub("-", " ", $1); gsub(":", " ", $2); d = $1" "$2 } mktime(d) > t ' 

awk documentation