快速脚本根据时间戳记来切分日志文件

我正在寻找一个快速的脚本 ,将parsing一个大的mail.log,并返回两个指定的时间戳之间的部分。 我想在我的所有邮件服务器上运行它,并让它们将相关日志部分复制到中央位置以供进一步分析。

我写了一些有用的bash,但速度很慢。

有没有人知道已经存在任何东西来完成这个任务?还是我需要学习Perl并且自己创build一些东西?

(我没有把这个放在SO上,因为我还没有编写任何代码 – 只是寻找其他人正在使用的东西)

我爱awk 🙂

对于我的日志,格式为:

Jul 14 12:49:10 xxxxxx sendmail[31337]: ........... 

我会用:

 awk '$3 >= "12:00:00" && $3 <= "13:00:00" {print;}' < /var/log/maillog 

想必您可以根据需要进行调整,例如,如果您不按天分割日志,

奖金:

Apache格式,我碰巧有踢:

 xxx.xxx.xxx.xxx - - [01/Jul/2009:03:06:24 -0400] "GET /favicon.ico HTTP/1.1" 200 3638 awk '$4 >= "[01/Jul/2009:03:00:00" && $4 <= "[01/Jul/2009:04:00:00" {print;}' < access_log 

对于特定的date范围并打印>输出文件

(我不能把上面的回答作为评论,否则我会这样做的)

HTH

 awk '$2 >= "21" && $3 >= "09:00:00" && $2 >= "21" && $3 <= "11:00:10" {print > "m_range.log";}' < /var/log/m.log cat m_range.log ... Nov 21 09:00:17 mail postfix/qmgr[1694]: 1C50D276524A: from=<[email protected]>, size=2378, nrcpt=1 (queue active) ...