Получение информации из файла, который выводит запись после записи в следующем формате: IPAddress xx [date: time -x] "method url httpversion" statuscode bytes "referer" "useragent"
Как бы вы поступилидоступ к этому файлу в качестве аргумента командной строки и сохранение этой информации, чтобы вы могли расположить ее в алфавитном порядке по IP-адресам, сохраняя всю информацию вместе?Я предполагаю, что мне нужно было бы как-то использовать хеши и массивы.
Теоретически у вас может быть столько текстовых файлов, сколько вы хотите, в качестве аргументов командной строки, но до сих пор эта часть не работала, у меня просто есть:
./logprocess.pl monster.log #monster.log is the file that contains entries
затем в коде предположим, что все не указанные переменные были объявлены как скаляры
my $x = 0;
my @hashstuff;
my $importPage = $ARGV[0];
my @pageFile = `$importPage`;
foreach my $line (@pageFile)
{
$ipaddy, $date, $time, $method, $url, $httpvers, $statuscode, $bytes, $referer, $useragent =~ m#(\d+.\d+.\d+.\d+) \S+ \S+ [(\d+/\S+/\d+):(\d+:\d+:\d+) \S+] "(\S+) (\S+) (\S+)" (\d+) (\d+) "(\S+)" "(\S+ \S+ \S+ \S+ \S+)"#
%info = ('ipaddy' => $ipaddy, 'date' => $date, 'time' => $time, 'method' => $method, 'url' => $url, 'httpvers' => $httpvers, 'statuscode' => $statuscode, 'bytes' => $bytes, 'referer' => $referer, 'useragent' => $useragent);
$hashstuff[$x] = %info;
$x++;
}
Определенно есть лучший способ сделать это, так как мой компилятор говорит, что у меня естьглобальные ошибки символов, такие как:
Неоднозначное использование% разрешено как оператор% в ./logprocess.pl строка 51 (# 2) (W неоднозначно) (S) Вы сказали что-то, что может не интерпретироватьсякак ты думал.Обычно его довольно легко устранить, указав пропущенную кавычку, оператор, пару скобок или объявление.
, и он не будет выполнен.Я не могу использовать какие-либо модули.