从/var/log/mail.log解析上次imap登录时间

时间:2010-07-04 21:39:21

标签: perl logging

我目前有一个bash脚本解析/var/log/mail.log以确定imap用户的上次登录时间/日期。我已经确定Perl会更有效,更快地执行此任务,尤其是在日志增长时。

给出以下示例/var/log/mail.log文件:

Jul  5 06:57:54 mail-04 dovecot: imap-login: Login: user=<user@foobar.com.au>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x
Jul  5 06:59:54 mail-04 dovecot: imap-login: Login: user=<user@foobar.com.au>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x
Jul  5 06:59:59 mail-04 dovecot: imap-login: Login: user=<otheruser@foobar.com.au>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x
Jul  5 07:01:54 mail-04 dovecot: imap-login: Login: user=<user@foobar.com.au>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x
Jul  5 07:01:59 mail-04 dovecot: imap-login: Login: user=<otheruser@foobar.com.au>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x

Perl打印每个唯一身份用户的上次登录时间的最有效方法是什么?例如。预期的输出应该是:

user@foobar.com.au last imap-login: Jul 5 07:01:54
otheruser@foobar.com.au last imap-login: Jul 5 07:01:59

2 个答案:

答案 0 :(得分:2)

使用哈希并继续为用户名分配登录时间听起来像一个简单的解决方案。

$logins{$username} = $date

答案 1 :(得分:1)

perl -ne '$l{$2}=$1 if /^(.{15}) .* imap-login: Login: user=<([^>]+)>/; END { print "$_ last imap-login: $l{$_}\n" for keys %l }' /var/log/mail.log