3

RPMベースのディストリビューションを使用しており、ログファイルで今日の日付と昨日の日付を動的に検索してレポートを出力したいと考えています。文字列は動的である必要があります(egrep "\ b2012-10- [20-30] \ b"はありません)。つまり、同じワンライナーまたはスクリプトを使用して、ファイルで今日の日付と昨日の日付を検索し、出力を出力できます。 。基本的に、ログファイルで特定のエントリを検索します。

これが私が得たものですが、egrepを動的なものに置き換えたいと思います:

grep "No Such User Here" /var/log/maillog | egrep "\b2012-10-2[3-4]\b" | cut -d "<" -f 3 | egrep -o '\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b' | cut -d "@" -f 2 | sort -d |uniq -ci | awk -F" " '{ print "Domain: " $2 " has been sent " $1 " messages that got a No Such User Here error." }'

どんな助けでも大歓迎です。dateコマンドを使用する可能性が非常に高いものを探しています

date "+%Y-%m-%d"

しかし、%dを取得して、当日と昨日の両方を検索する必要があります。これはできますか?

どんな洞察も大歓迎です。

4

2 に答える 2

2

GNU日付がある場合:

$ x=$(date "+%Y-%m-%d")
$ y=$(date "+%Y-%m-%d" -d "-1 day")
$ egrep "($x|$y)" file

x には現在の日付が含まれ、y には昨日の日付が含まれます。

于 2012-11-01T15:01:01.913 に答える
0

GNU awks 時間関数を使用する場合:

gawk 'BEGIN{
   today     = strftime("%Y-%m-%d")
   yesterday = strftime("%Y-%m-%d",systime()-24*60*60)
}
$0 ~ "(" today "|" yesterday ")"
' file
于 2012-11-01T15:07:53.687 に答える