Compter les résultats... [Bash /Awk] - Shell/Batch - Programmation
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 |
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 } |
S'il y a besoin de trier les adresses, il suffit de rajouter un petit sort :
awk '/pattern/ { ips[$10] += 1 } |
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
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. |
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...
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 :
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.