[Bash /Awk] Compter les résultats...

Compter les résultats... [Bash /Awk] - Shell/Batch - Programmation

Marsh Posté le 09-10-2006 à 23:51:26    

Salut,
 
j'ai une ligne de commande qui me sert à afficher des ip tirées d'un fichier log. Je fais :
 

Code :
  1. cat /var/log/monfichier.log | grep $PATTERN | awk '{print $10}' | uniq


 
et j'obtiens la liste d'ip qui m'intéresse. Bon, je voudrais afficher en même temps (à côté) combien de fois chaque ip est représentée, or wc -l ne me donnera que le nombre total d'ip. Evidemment, je pourrais passer par un fichier temporaire mais il y a sûrement plus élégant. J'ai aussi essayé avec xarg mais wc ne les prend pas ligne à ligne, mais en totalité et par suite ça ne marche pas non plus. Comment on fait dans ce cas ?  
 
Merci de vos idées. :)

Reply

Marsh Posté le 09-10-2006 à 23:51:26   

Reply

Marsh Posté le 10-10-2006 à 03:52:06    

uniq -c
 
Il faut aussi un coup de sort, car uniq ne marche que si l'entrée est triée.
 
Et puis, en passant, puisque tu fais du awk, grep est absolument inutile. Le cat et egalement inutile.
 

awk '/pattern/ { print $10 }' /var/log/monfichier.log | sort | uniq -c

Reply

Marsh Posté le 10-10-2006 à 11:13:49    

Si les adresses ip n'ont pas besoin d'être triée en sortie, il est possible d'utiliser uniquement awk pour traiter le problème.

awk '/pattern/ { ips[$10] += 1 }  
     END { for (ip in ips) printf("%-15s : %d\n", ip, ips[ip]) }
    ' /var/log/monfichier.log


S'il y a besoin de trier les adresses, il suffit de rajouter un petit sort :

awk '/pattern/ { ips[$10] += 1 }  
     END { for (ip in ips) printf("%-15s : %d\n", ip, ips[ip]) }
    ' /var/log/monfichier.log | \
sort -t. -n -k1,4



---------------
Jean Pierre.
Reply

Marsh Posté le 10-10-2006 à 22:42:16    

Ah, il va falloir que que je mette à awk. Je n'osais pas trop approfondir et je ne m'en sers jusqu'ici que pour afficher avec des commandes bash mais vos exemples me donnent envie de creuser la chose.  
Merci :)

Reply

Marsh Posté le 11-10-2006 à 06:47:45    

ats a écrit :

Ah, il va falloir que que je mette à awk. Je n'osais pas trop approfondir et je ne m'en sers jusqu'ici que pour afficher avec des commandes bash mais vos exemples me donnent envie de creuser la chose.  
Merci :)


 
awk est justement fait pour les traitements complexes des fichiers texte car il intègre tout un langage permettant la création d'un algo complet pour traiter chaque ligne du fichier. Faut absolument t'y mettre...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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