bonjour ,
je veux sortir un top ten des site visite par le membre d un reseau authentifier sur mon cache proxy ... la structure du ficier que je recupere est la suivante
-; url;octet;hit
srvname;h18000.www1.hp.com;396;382
srvname;welcome.hp-ww.com;394;387
srvname;hphqglobal.112.2o7.net;1336;1005
srvname;hphqglobal.112.2o7.net;1429;881
srvname;www.lesjeudis.com;506;382
srvname;hphqglobal.112.2o7.net;1429;881
srvname;www.lesjeudis.com;506;382
je veut donc pour chaque url faire le total des hit et des octet transmis ...
je le suis fais un script du genre ...
#!/usr/bin/perl
# Affiche les mots répétés dans un texte
open(F1,"/root/tmp/script/tmp_log" );
while(<F1> ) {
@tab_ligne = (split(/;/,$_))[1];
@tab_hit = (split(/;/,$_))[2];
@tab_oct = (split(/;/,$_))[3];
foreach $mot (@tab_ligne){
$tab_freq{$mot}++;
}
foreach $hit (@tab_hit){
$tab_fhit{$hit}++;
}
foreach $oct (@tab_oct){
$tab_foct{$oct}++;
}
}
open (FHO, '| sort +1 -nr');
foreach $mot (keys(%tab_freq)){
if ($tab_freq{$mot} > 1){
$hit += $tab_fhit{$hit};
# $tab_foct{$oct}++;
# printf FHO "%s\t%d\n", $mot, $tab_freq{$mot};
printf FHO "$mot".";"."$hit\n";
}
}
close FHO
mais ca ne marche pas ...
Qu un pourrait me dire ou ca merde
j en ai fait un autre genre ...
#!/usr/bin/perl -w
open(F1,"/root/tmp/script/http_0312_log" );
open(F2,">>/root/tmp/script/tmp_log" );
while(<F1> ) {
$ip=(split(/ /,$_))[0];
$url0=(split(/ /,$_))[6];
$url=(split(/\//,$url0))[2];
$hit=(split(/ /,$_))[14];
$octet=(split(/ /,$_))[15];
# stockage ds un fichier temporaire
print F2 "$ip".";"."$url".";"."$hit".";"."$octet\n";
}
close(F2);
close(F1);
#je recupere le nombre de ligne de monfichier_tmp
open(F2,"/root/tmp/script/tmp_log" );
$nbligne +=tr/\n/\n/ while sysread(F2,$_,2**16);
close(F2);
# monfichier_tmp a une structure genre
#ip;domaine;hit;octet
#ip;www.foo.com;200;200
#ip;www.cuisine.org;200
#ip;www.foo.com;200;200
#ip;www.cuisine.org;200;200
#
# j ai besoin sur le top ten des site visite de faire le total des hits et des octets transferer
#
#mon code
#creation de tableau temporaire via une subroutine
sub tableau {
@tab_domaine=();
@tab_hit=();
@tab_octet=();
open(F2,"</root/tmp/script/tmp_log" );
while(<F2> ) {
push(@tab_domaine,(split(/;/,$_))[1]);
push(@tab_hit,(split(/;/,$_))[2]);
push(@tab_octet,(split(/;/,$_))[3]);
}
return(\@tab_domaine, \@tab_hit, \@tab_octet);
}
# Ainsi je recupere 3 tableau contenant nom de domain , hit et octet
#
#maintenant , pour chaque domaine faire la somme des hit et des octets , celui qui depasse les dix est
#enregister ds un nouveau fichiers
#initialisation d un tableau pour enregister les top ten
#appel de tableau pour recupere les trois tableau ci-dessus
tableau();
for ($i=0; $i <= $nbligne; $i++) {
$ntop=1;
for ($k=1; $k <= $nbligne; $k++) {
if ( $tab_domaine[$i] eq $tab_domaine[$i+$k])
{
$tab_hit[$i] += $tab_hit[$i+$k];
$tab_oct[$i] += $tab_oct[$i+$k];
$ntop++;
}
$nbligne -= $k;
if ($ntop gt 10)
{
open(F3,">>/root/tmp/script/result_log" );
print F3 "servername".";"."$tab_domaine[$i]".";"."$tab_hit[$i]".";"."$tab_oct[$i]\n";
close(F3);
}
}
}
Idem rien ... please help