Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1617 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1454626
ats
Posté le 09-10-2006 à 23:51:26  profilanswer
 

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. :)

mood
Publicité
Posté le 09-10-2006 à 23:51:26  profilanswer
 

n°1454636
matafan
Posté le 10-10-2006 à 03:52:06  profilanswer
 

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

n°1454732
aigles
Posté le 10-10-2006 à 11:13:49  profilanswer
 

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.
n°1455129
ats
Posté le 10-10-2006 à 22:42:16  profilanswer
 

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 :)

n°1455170
Sve@r
Posté le 11-10-2006 à 06:47:45  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
[Bash]Suppression de lignes contenant des mots d'un autre fichierGrouper les résultats d'une requete
parcourire un tableau et compter le nombre de valeurs d'une cléCompter le nbre de ligne de resultat d'un requete ?
[SQL] Compter le nombre de 'a' dans le texte d'un champ[bash] enlever les questions dans la completion automatique ?
Comment compter les click sur un lien en durComparer des floats (script bash)
Problème pour compter dans champ sqlFiltrer des résultats d'une recherche sans rafraîchir toute la page
Plus de sujets relatifs à : [Bash /Awk] Compter les résultats...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR