bash, awk, grep, sed, uniq...

bash, awk, grep, sed, uniq... - Shell/Batch - Programmation

Marsh Posté le 09-03-2008 à 21:56:14    

Bonsoir tout le monde !
 
J'aimerais à l'aide d'un script pouvoir extraire les hosts des 3 plus gros consommateur de hits de mon site (sans passer par awstats).
 
J'ai réussi à pondre ça mais je n'ai aucune idée de la façon d'insérer un " host xxx.xxx.xxx.xxx | awk '{print $5}' (et accessoirement en supprimant le point à la fin) dans mon :
 

Code :
  1. cat access.log | grep "/~[^/]*" | awk '{ print $1; }' | uniq -cd  | sort -gr | head | awk '{ print $2; }'


 
J'ai bien conscience qu'il y a moyen de faire un truc plus propre mais j'avoue que j'ai un peu de mal avec le bash :)
 
Merci d'avance.

Reply

Marsh Posté le 09-03-2008 à 21:56:14   

Reply

Marsh Posté le 10-03-2008 à 08:34:15    

Je trouve que le plus simple c'est de passer par un petit script PERL, avec une hashmap ça se fait tout seul :

perl -ne '{ ($h, ) = split / /; $hosts{$h}++; } END{ foreach $key ( sort keys %hosts ) { print "$hosts{$key} - $key\n"; } }' access_log | sort -nr

 

Et tu n'as plus qu'à ajouter un "| head -3" pour ne conserver que les 3 premiers.

 

Il faut une dizaine de secondes sur mon serveur pour parser un fichier >100Mo.


Message édité par Elmoricq le 10-03-2008 à 08:35:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed