2016-11-07 5 views
0

awkを使用してログファイルに最後の5分間にstringの出現を見つけようとしています。私がしようとしています コマンドは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" 

である。しかし、これは、出力をreturingされていません。

は、ログファイル内の

コンテンツはこの

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

を参照してください。 'を使用してその日付形式に一致させます。 'date '+%F%T" ' –

答えて

1

あなたの日付フォーマットは、これはあなたが

[[email protected] ~]$ date "+%b %_d %H:%M" 
Nov 7 16:30 

を持っているもの。これは、あなたは私が書くでしょう

[[email protected] ~]$ date "+%F %H:%M:%S" 
2016-11-07 16:32:05 
+0

ありがとうございます。それは完全に動作します! – user2961454

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 ' 

あなたは `日... ":%のM:%S +%Y-%M-%D%H" をお勧めしますawk documentation

関連する問題