限制来自exim日志的grep的结果

时间:2013-06-14 12:04:34

标签: awk grep exim

我正在尝试编写一个小的shell脚本,每小时运行一次,并返回过去一小时内发送过电子邮件的所有用户和IP,这样我就可以查找任何已泄密的帐户。

我通过以下方式获取我想要的数据:

grep "A=dovecot_login" /var/log/exim_mainlog | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c

但是我想将这些结果限制在前一个小时(所以如果我在上午10点运行它,那么结果将是从早上9点到早上10点的那些登录。)

知道如何限制吗?

我认为我已经接近了
hour=`date | awk {'print $4'} | cut -d: -f 1`; lasthour=`expr $hour - 1`; grep "`date -I` $lasthour" /var/log/exim_mainlog | grep "A=dovecot_login" | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c

但是那里没有爱。

TIA

1 个答案:

答案 0 :(得分:1)

不要重新发明轮子,使用其他人已经在生产中编写和测试过的工具:从 logcheck 包中获取 logtail2 perl脚本。然后每小时只有一个cronjob来处理你正在拖尾的日志文件。 logtail2 脚本会跟踪上次运行时停止的位置,因此您知道每小时运行它是否只能获得最后一小时的日志行。然后使用常规文本解析来提取要跟踪的数据。

可以在http://packages.debian.org/unstable/logtail上找到tarball。