die logdatei ist vorher in das array @datei geladen worden.
sie besteht aus 9 spalten, dies wird mit dem split geteilt und im endeffekt in einem hash (%logentry).
und mit dem IF habe ich alle einträge bekommen die mit http und ftp angefangen haben, d.h. der originale eintrag sieht z.B.so aus:
http://officescan-t.activeupdate.trendmicro.com/Activeupdate/server.ini
ich will aber nur "officescan-t.acriveupdate.trendmicro.com" haben
oder
http://www.crazyhandyfun.de/layouts/layout-1/images/bt_kurzel.gif
"www.crazyhandyfun.de"
allerdings sind wohl auch solche einträge vorhanden:
freemail.web.de:443
da soll natürlich nur "freemail.web.de" bei rauskommen.
so sieht mein script aus:
my %ip_hits;
my %ip_bytes;
my %domain_hits;
my %domain_bytes;
foreach(@datei)
{
@elemente = split(/ +/, $_);
local %logentry = (time => $elemente[0],elapsed => $elemente[1], remotehost => $elemente[2], code_status => $elemente[3], bytes => $elemente[4], method => $elemente[5], url => $elemente[6], rfc931 => $elemente[7], peerstatus_peerhost => $elemente[8], type => $elemente[9]);
$log= $logentry{url};
if ($log =~ /^(https?|ftps?)://(.*?)/(.*?)$/)
{
$ip_hits{$logentry{remotehost}}++;
$ip_bytes{$logentry{remotehost}}+=$logentry{bytes};
$domain_hits{$2}++;
$domain_bytes{$2}+=$logentry{bytes};
}
}#ENDE foreach
gruß
marcel