私は、ログファイルに2つの異なる時間の間に特定の文字列が含まれているかどうかを調べています。タイム・スタンプ2016-11-10 06:45:00
と2016-11-10 10:45:00
で始まる行の間にfoo
が存在する場合、threshold
変数は時間を設定します。たとえば、240は4時間です。AwkとGrepを使用して、ログファイル内の2つの時間の間の線を見つける
current="$(date "+%Y-%m-%d %H:%M:%S")"
threshold=240
dt_format="+%Y-%m-%d %H:%M:%S"
from="$(date -d "$threshold minutes ago" "$dt_format")"
if awk '$0 >= "$from" && $0 <= "$current"' /path/file.log | grep "foo"
then
exit 0
else
exit 1
fi
しかし、私はわからないんだけど、なぜ私はif
文でコマンドラインで$from
と$current
を渡すとき、それは実際にそれを読んでいません。それはすなわち2016-11-10 06:45:00
from
と2016-11-10 10:45:00
のように、右の日付を比較していないと、すべての行と終了0
を返します。しかし、私は手動でif
文の日付を入れている場合ので、私はゴミに渡しているかのようですcurrent
それから、2つの日付の間にある正しい行が返され、grepを使ってその行にfoo
が含まれているかどうかを確認できます。
threshold
変数を変更して、自分のニーズに基づいて2つの異なる時間をチェックする必要があるため、自分のコードが機能しない理由を実際に理解できません。
2016-11-10 06:45:00
は、タイムラインが各行の先頭からどのようにフォーマットされているかをログに記録します。
ありがとうございました。
これは役に立つかもしれません:[Schwartzian transform](https://en.wikipedia.org/wiki/Schwartzian_transform) – Cyrus
あなたは 'if ...; 0を終了します。そうでなければ出口1。あなたがそれを残しておけば、あなたのスクリプトはgrepの終了ステータスで終了します。 –