Разобрать время последнего входа в систему imap из /var/log/mail.log - PullRequest
1 голос
/ 05 июля 2010

В настоящее время у меня есть скрипт 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 ]

2 голосов
/ 05 июля 2010

Использование хэша и постоянное назначение времени входа в систему имени пользователя звучит как простое решение.

$logins{$username} = $date
1 голос
/ 05 июля 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...