foxintel
07-04-2010, 23:21
Вот пример файла))) еще хотел уточнить, это лог файл прокси сервера handycache
1) вот забор данных из файлика
Кстати формат отличается слегка от описанного вами:
- разделение в исходном файле табуляцией
- есть неопознанный "хвост" - пихается в переменную $hz :)
#! d:\Perl\bin\perl.exe -w
#use strict;
# filename
my $full_file_name='d:\home\kim\perl\03.03.2010#18_59_51.txt';
# открытие десктора файла, если не найдено - аварийный выход с сообщением об ошибке
open HANDYCACHE, "< $full_file_name" or die "Cannot open file: $full_file_name. System state: $!";
# построчное чтение, до конца файла
while (<HANDYCACHE>) {
# чтение каждой строки происходит в переменную по умолчанию $_
my $some_input=$_;
#my $some_input='03.03.2010/19:09:27 fox/192.168.2.10 http://www.playground.ru/images/f2.gif 960 960/0 100% 0 "200 OK From Cache (HC)" Н.5';
# date,time,user,ip,url,size,re,cache,pr,send,otv,hz
chomp $some_input;
# отладочный вывод на экран считанной строки
#print "$some_input\n";
#print "begin---------------------------------------------------------\n";
#
#-----------------------------------------03.03.2010------------------------------------------------/19:03:21-----------------------------------------------tab-----------fox/192.168.2.10 ----------------------------------------------------------------------------tab---http://yandex.ru -------7020-------tab-------7020/493 ----------tab--------100% ---tab----999 -------tab--"200 OK From Cache (HC)"-------Н.5;
$some_input =~ m{^([0-9]{1,2}.[0-9]{1,2}.[0-9]{2,4})/([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})\b\s+\b(\w+)/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\b\s+\b(\S+)\b\s+\b(\d+)\b\s+\b(\d+)/(\d+)\b\s+\b(\d+)%\s+\b(\d+)\b\s+(".*")\s+(.*)$};
my $date=$1;
my $time=$2;
my $user=$3;
my $ip=$4;
my $url=$5;
my $size=$6;
my $re=$7;
my $cache=$8;
my $pr=$9;
my $send=$10;
my $otv=$11;
my $hz=$12;
# отладочный вывод на экран разобранной строки
print " $date\n $time\n $user\n $ip\n $url\n $size\n $re\n $cache\n $pr\n $send\n $otv\n $hz\n";
# отладочная заглушка на выполнение одного прохода
#last;
# SQL вызовы
}
print "end---------------------------------------------------------\n";
close HANDYCACHE;
2) С SQL операторами пример приведен в приложенном файлике.
Проверить не могу, за отсутствием MySQL
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC