计算每小时日志文件中字符串的出现次数(使用shell脚本)

时间:2013-03-23 17:12:20

标签: shell

我想创建一个脚本来计算特定字符串(域名)的出现次数 从每小时的日志文件(邮件日志),以检查他们每小时发送的电子邮件数。

我知道有很多简单而不同的方法可以在文件中找到一个脚本(比如grep等) 并计算行数(如wc -l) 但我不知道每小时怎么做。

是的我可以通过cron作业每隔60分钟调用一次脚本,但这会从头开始读到日志文件,直到脚本被执行的那一刻......而不是过去60分钟内的行,我不知道我知道如何克服这一点。

注意:

我正在使用的命令显示每个域的所有已发送电子邮件:

\# cat /usr/local/psa/var/log/maillog | grep -i qmail-remote-handlers \
| grep from | awk {' print $6 '} | gawk -F@ '{ print $2 }' \
| sort | uniq -c | sort -n | tail

结果如下:

      8 domain1.tld
     45 domain34.tld
    366 domain80948.tld
etc etc

1 个答案:

答案 0 :(得分:0)

问题的主要内容是:

Yes I can call the script every 60 minutes via a cron job but this would read the log file
from the beginning till the moment the script was executed..and not the lines made in the
last 60 minutes, and I don't know how to overcome this.

你怎么能解决这个问题?

  1. 您可以在处理它的日志文件中保存行数。之后,使用sed跳过这些行。
  2. 与1中相同但保存已处理文件中的字节数;然后使用dd跳过它。
  3. 您可以在处理文件后旋转(重命名)该文件(此方法的缺点是您需要重新配置系统以进行日志处理)
  4. 我个人会选择方法2.它实现起来非常高效且非常简单。