URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3187
[ Назад ]

Исходное сообщение
"Разобрать лог"

Отправлено 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 , 20-Июл-04 13:52 
@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);


"Разобрать лог"
Отправлено agat , 21-Июл-04 04:22 
Огромное спасибо!
Чуть чуть переделал, доделал вывод в файл с разбивкой и все! Работает!