2

次の形式のデータを含むログファイルがあります

[1361991081] SERVICE NOTIFICATION: qreda;qa-hadoop1;CPU Load;CRITICAL;notify-service-by-email;CRITICAL - load average: 18.29, 18.14, 18.10
[1361991371] SERVICE NOTIFICATION: qreda;CRITICAL-SERVICES_FOR_LAST_24_HOURS;qa-hadoop1:Critical Services;CRITICAL;notify-service-by-email;CPU Load,Memory,
[1361994681] SERVICE NOTIFICATION: qreda;qa-hadoop1;CPU Load;CRITICAL;notify-service-by-email;CRITICAL - load average: 18.02, 18.06, 18.11
[1361994971] SERVICE NOTIFICATION: qreda;CRITICAL-SERVICES_FOR_LAST_24_HOURS;qa-hadoop1:Critical Services;CRITICAL;notify-service-by-email;CPU Load,Memory,

過去 7 日間のすべてのデータが含まれています。このファイルを grep して、昨日のログを表示したいと考えています。ここで日付はタイムスタンプとして表示されます。次のコマンドを使用しています

cat /usr/local/nagios/var/nagios.log |grep qa-hadoop1|grep CRITICAL|grep NOTIFICATION | awk -F, '{ if ($1>"[1361989800]" && $1<"[1362076199]") print }'

1361989800、計算されたタイムスタンプ値ですThu Feb 28 00:00:00 IST 2013

および 1362076199は、 の計算されたタイムスタンプ値ですThu Feb 28 23:59:59 IST 2013

これはうまくいきますが、問題は引数として渡す方法1361989800です1362076199??

4

3 に答える 3

2

これだけ必要awkです。

awk -va=1361989800 -vb=1362076199 '{gsub(/[][]/,"")}/qa-hadoop1|CRITICAL|NOTIFICATION/&&$1>a&&$1<b' file

オプションを使用すると、-v変数を渡すことができます。またgsub、最初のフィールドの整数比較のために括弧を削除するために使用します(カンマではなくスペースで区切られています)


ノート:

grepファイルを読み取るので、必要はありません。cat file | grep 'pattern'またgrep 'pattern' file、次のように交互に使用できるため、 3 回 egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' fileパイプする必要はありません。grep

のより多くのawkishバージョンはawk -F, '{ if ($1>"[1361989800]" && $1<"[1362076199]") print }'、構文をawk -F, '$1>"[1361989800]" && $1<"[1362076199]"'必要とせずif、デフォルトのブロックawkは print です。

于 2013-03-01T09:16:47.953 に答える
1

コマンド ライン パラメーターの割り当てを使用する 1 つの方法を次に示します。

grep qa-hadoop1 input | grep CRITICAL| grep NOTIFICATION | \
  awk -F, -v b=1361989800 -v e=1362076199 \
    '{ if ( $1 > "["b"]" && $1<"["e"]") print }'
于 2013-03-01T09:16:04.917 に答える
0

あなたの. cat|grep|grep|grep|awk_ $1 は最初から最初のカンマまでですが、これは正しくありません。,FS

ステートメントのFSように日付を比較する場合は、スペースにする必要があります。if

-F,awk ライン部分から削除すると機能する場合があります。それを試してみてください。

[より簡単に、 or]を のように取ることができますFS

于 2013-03-01T09:43:03.873 に答える