我目前有一个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
答案 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