2013-02-13 4 views
1

У меня есть почтовый файл в/var/log/mailog. Структура содержимого, как показано ниже:mailog разбор с использованием perl

Feb 13 10:13:24 mailer dove: imap-login: Login: user=<[email protected]>, method=PLAIN, rip=::ffff:14.012.251.125, lip=::ffff:33.01.121.12.80 
Feb 13 10:13:25 mailer dove: imap-login: Disconnected: rip=::ffff:10.100.2.10, lip=::ffff:33.01.121.12.81 
Feb 13 10:13:25 mailer dove: pop3-login: Disconnected: rip=::ffff:10.100.2.10, lip=::ffff:33.01.121.12.81 
Feb 13 10:13:25 mailer dove: pop3-login: Disconnected: rip=::ffff:10.100.2.10, lip=::ffff:33.01.121.12.80 
Feb 13 10:13:25 mailer dove: imap-login: Disconnected: rip=::ffff:10.100.2.10, lip=::ffff:33.01.121.12.80 
Feb 13 10:13:26 mailer dove: POP3([email protected]): Disconnected: Logged out top=0/0, retr=0/0, del=0/24, size=187461 
Feb 13 10:13:26 mailer dove: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=::ffff:14.012.251.125, lip=::ffff:33.01.121.12.80 
Feb 13 10:13:26 mailer dove: POP3([email protected]): Disconnected for inactivity top=0/0, retr=0/0, del=0/32, size=473758028 
Feb 13 10:13:26 mailer dove: POP3([email protected]): Disconnected for inactivity top=0/0, retr=0/0, del=0/9, size=140778365 
Feb 13 10:13:26 mailer dove: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=::ffff:14.012.251.125, lip=::ffff:33.01.121.12.80 
Feb 13 10:13:28 mailer dove: POP3([email protected]): Disconnected: Logged out top=0/0, retr=1/8336, del=1/1, size=8319 
Feb 13 10:13:28 mailer dove: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=::ffff:21.254.145.12, lip=::ffff:33.01.121.12. 

Я хочу, чтобы иметь возможность анализировать это с помощью Perl для извлечения и группы числа появления пользователя появились в журнале и сортировать его с наибольшим размером на вершине ,

Я пробовал ниже, но это печатает только каждого пользователя;

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

Можете ли вы помочь мне настроить этот скрипт.

ответ

3

Попробуйте сделать это:

perl -lne ' 
    $h{$1}++ if /imap-login:\s+Login:\s+user=<([^>]+)>/; 
    END{ 
     foreach my $key (sort { $h{$a} <=> $h{$b} } keys(%h)) { 
      print $key, " ", $h{$key} 
     } 
    } 
' /var/log/mail.log 

EDIT

Если вы хотите добавить время доступа, работа вокруг этого:

perl -wlne ' 
    do{ 
     $h{$2}{inc}++; 
     $h{$2}{time}="$2"; 
    } if /^(\w+\s+\d+\s+\d+:\d+:\d+).*?Login:\s+user=<([^>]+)>/; 
    END{ 
     use Data::Dumper; 
     print Dumper \%h; 
    } 
' 

Вы просто должны разобрать HASH ,

+0

Nice sputnick! Быстро, можете ли вы помочь сортировать по размеру в порядке возрастания и, возможно, удалить обманы ;-) – Bitmap

+0

См. Мой отредактированный POST, который должен сделать трюк. –

+0

Блестящий! Быстро подумайте, могу ли я добавить к нему последнее время доступа ?! – Bitmap

 Смежные вопросы

  • Нет связанных вопросов^_^