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

Исходное сообщение
"Анализ логов Apache"

Отправлено lv2 , 08-Май-12 01:42 
Народ, помогите плиз?
Нужно написать скрипт на перл а у меня с ним опыта вобще никакого.
Задача:
Есть 4 папки в папке /weblogs
в каждой из них лежит немерянное количество архивированных логов апача.
Теперь есть файлик с 80тью IP адресами, и надо получить отчет какой адрес в каком файле встречается.
Человек который поставил задачу посоветовал применить перл хэши.
Вот сижу теперь ломаю голову что это такое и с чем его едят :(

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


Содержание

Сообщения в этом обсуждении
"Если не знаешь языка - вряд ли поможет, НО"
Отправлено wolkwww , 10-Май-12 11:16 
<pre>
#!/usr/bin/perl

use File::Find;

$addr_file = 'addr.txt';
my %h;
open(F, "< $addr_file");
map{ chomp; $h{$_}={}; } <F>;


$cpath = `pwd`;
chomp $cpath;

find(\&wanted, "./");

map{
    my $h = $h{$_};
    my $addr = $_;
    map{
    print "$a\t$_\n";
    }    sort {$a cmp $b} keys %$h;

} sort{ $a cmp $b} keys %h;


sub wanted{
    if (-f $_){
        my $n = $File::Find::name;
        if ($n =~ s/^\.//){
        $n = $cpath.$n;
        }
    open(F, "< $_");
    local $/=undef;
    my $s = <F>;
    map{
            if (index($s, $_) >=0 ){
                ${$_}{$n}++;
            }
    } keys %h;
    }
}

<pre>

Это будет работать в родительском каталоге и просматривать все файлы в этом каталоге(с поиском).
Если файло сжатые, то надо разжимать (можно на лету) но для начала надо изучить основные понятия языка.


"Обчибочка"
Отправлено wolkwww , 10-Май-12 11:20 
Вместо:
    map{
    print "$a\t$_\n";
    }    sort {$a cmp $b} keys %$h;
Надо:
    map{
    print "$addr\t$_\n";
    }    sort {$a cmp $b} keys %$h;