Код: Выделить всё
77.221.149.162 - aaa.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
77.221.149.162 - aaa.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
77.221.149.162 - www.aaa.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
77.221.149.162 - bbb.aaa.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
77.221.149.162 - bbb.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
77.221.149.162 - xxx.ccc.su [10/Jan/2010:00:00:16 +0300] "GET / HTTP/1.0" 200 612 "-" "ApacheStats/0.4 wget/1.8"
есть список владельцев доменов, такого вида
Код: Выделить всё
aaa.su:1033:user1
bbb.su:1043:user2
ccc.su:1043:user2
проблема что на выходе мне надо знать сколько строк в логе для user1 и сколько для user2
перебирать два файла и сравнивать - это тупо, в одном мильён записей, в другом 2000 - это будет 2 триллиона операций...
на сейчас допилился до такого:
Код: Выделить всё
srv1# cat /root/scripts/stat/count.user.dynamics.pages.pl
#!/usr/bin/perl
# подсчёт числа динамических страниц от сайтов юзера
# по логам nginx
# функции
do "/root/scripts/stat/includes/perl.functions.pl";
# достаём имя файла - параметр вызова файла
if(!defined(@ARGV)){
print "Error: missing 1 parameter - log file name\n";
exit 1;
} # закрытие - аргументы вызова не заданы
# проверяем что файл существует
if ( ! -f @ARGV[0]){
print "Error: file '" . @ARGV[0] . "' does not exists\n";
exit 1;
} # закрытие проверки существования файла с логом
# открываем файл лога и дёргаем его в массив
open (MYLOG, @ARGV[0]);
# сохраняем в массив содержимое - построчно
@my_log = <MYLOG>;
# закрываем
close MYLOG;
# считываем файл с владельцами
open (MYTMP, "/root/scripts/exim/domain.owners.txt");
# сохраняем содержимое в массив
@my_owners = <MYTMP>;
# закрываем
close MYTMP;
# перебираем построчно владельцев
foreach $stroka (@my_owners)
{
# разбираем строчку на составлюящие
($domain, $uid, $user) = split(':', trim($stroka));
#print "$domain, $uid, $user \n";
}