The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Разобрать лог, !*! agat, 20-Июл-04, 05:36  [смотреть все]
Уважаемые господа! Если не трудно помогите.....
Имеем лог файл radiusa следующего вида
Thu May 27 16:17:43 2004
Acct-Session-Id = "00000044"
Called-Station-Id = "хххх.хххх.хххх"
Calling-Station-Id = "хххх.хххх.хххх"
Acct-Authentic = Local
User-Name = "хххх.хххх.хххх"
Acct-Status-Type = Start
NAS-Port-Type = 19
NAS-Port-Id = 290
Service-Type = Framed-User
NAS-IP-Address = ххх.ххх.ххх.ххх
Acct-Delay-Time = 0
Timestamp = 1085642263
Request-Authenticator = Verified

Thu May 27 17:09:05 2004
Acct-Session-Id = "00000044"
Called-Station-Id = "хххх.хххх.хххх"
Calling-Station-Id = "хххх.хххх.хххх"
Acct-Session-Time = 3083
Acct-Input-Octets = 40108
Acct-Output-Octets = 22791
Acct-Input-Packets = 456
Acct-Output-Packets = 84
Acct-Authentic = Local
User-Name = "хххх.хххх.хххх"
Acct-Status-Type = Alive
NAS-Port-Type = 19
NAS-Port-Id = 290
Service-Type = Framed-User
NAS-IP-Address = xxx.xxx.xxx.xxx
Acct-Delay-Time = 0
Timestamp = 1085645345
Request-Authenticator = Verified

Как можно написать скрипт, что бы рабобрать это все по DATE, USER-Name и сосчетать количество переданных байт.

Заранее благодарю за помощь.

  • Разобрать лог, !*! mirya, 13:52 , 20-Июл-04 (1)
    @weekday = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
    $weekday{$weekday[$_]} = $_ for (0..$#weekday);

    @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
    $month{$month[$_]} = $_ for (0..$#month);

    @mylog = ();    # dummy

    MAINLOOP:
    while (<>) {
        chomp;
        next if /^\s*$/o;
        if (/^\s*(\w\w\w) (\w\w\w) (\d+) (\d+):(\d+):(\d+) (\d+)/o &&
            $weekday{$1} && $month{$2}) {
            push @mylog, $cur_item if $cur_item;
            $cur_item = [$weekday{$1}, $month{$2}, $3, $4, $5, $6, $7, '', 0];
            next MAINLOOP;
        }
        if (/^\s*([\d\w-]+)\s*=\s*(.*)/o) {
            ($key, $val) = ($1, $2);
            $val =~ s/\s+$//o;
            $val = $1 if $val =~ /^"(.*)"$/o;
            if ($key eq 'User-Name') {
                $cur_item -> [7] = $val;
            } elsif ($key eq 'Acct-Input-Octets') {
                $cur_item -> [8] += $val;
            } elsif ($key eq 'Acct-Output-Octets') {
                $cur_item -> [8] += $val;
            }
        }
    }
    push @mylog, $cur_item if $cur_item;

    print "$_->[7]\t$_->[8]b\t$weekday[$_->[0]] $month[$_->[1]] $_->[2] $_->[3]:$_->[4]:$_->[5] $_->[6]\n" for (@mylog);




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру