Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/01/2012, à 18:06

gl25.it

[Résolu] Statistiques en shell : calculer l'occurrence des mots

Bonjour,
Je souhaite faire des statistiques sur l’occurrence de mots dans un flux.
Avec un "grep -h pleins_de_fichiers_de_log TOMATE= | sort -u", j'ai une sortie avec 450 lignes du genre :

[0 1652 11/29/11-19:14:19 cmd_test.c 1.0 136] TOMATE=500
[0 1654 11/29/11-19:14:22 cmd_test.c 1.0 136] TOMATE=250
[0 1656 11/29/11-19:14:25 cmd_test.c 1.0 136] TOMATE=250
[0 1658 11/29/11-19:14:28 cmd_test.c 1.0 136] TOMATE=250
[0 1664 11/29/11-14:46:09 cmd_test.c 1.0 136] TOMATE=125

Je voudrais savoir sur ces 450 actions, combien de fois j'ai 125, combien de fois 500, etc...
Sur l'exemple ci dessus, on a: 500:1 250:3 125:1
Il n'y a qu'une dizaine de valeurs possibles pour TOMATE, donc c'est faisable de faire dix fois "grep TOMATE=xxx | wc -l".
Mais je cherche une solution moins manuelle, et même idéalement sans spécifier les valeurs possibles (c'est à dire qu'il les trouve tout seul) (pas la peine de proposer une boucle for sur les valeurs possibles).

Je propose de partir de la sortie de la commande suivante :

$ grep -h pleins_de_fichiers_de_log TOMATE= | sort -u | sed 's/^.*TOMATE=//'
500
250
250
250
125

Que vous pouvez simuler avec celle ci :

echo 500 250 250 250 125 | tr ' ' '\n'

Des idées ?

Edit 24/01/2012 17h29: mise en forme + résolu

Dernière modification par gl25.it (Le 24/01/2012, à 18:27)


Ubuntist depuis Noël 2006.

Hors ligne

#2 Le 24/01/2012, à 18:08

sputnick

Re : [Résolu] Statistiques en shell : calculer l'occurrence des mots

Salut,

voici :


$ cat z
[0 1652 11/29/11-19:14:19 cmd_test.c 1.0 136] TOMATE=500
[0 1654 11/29/11-19:14:22 cmd_test.c 1.0 136] TOMATE=250
[0 1656 11/29/11-19:14:25 cmd_test.c 1.0 136] TOMATE=250
[0 1658 11/29/11-19:14:28 cmd_test.c 1.0 136] TOMATE=250
[0 1664 11/29/11-14:46:09 cmd_test.c 1.0 136] TOMATE=125
$ 
$ cut -d= -f2 z
500
250
250
250
125
$ 
$ cut -d= -f2 z | sort -n | uniq -c
      1 125
      3 250
      1 500

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 24/01/2012, à 18:24

gl25.it

Re : [Résolu] Statistiques en shell : calculer l'occurrence des mots

Extra : "uniq -c" est exactement l'outil qu'il me fallait.
Merci sputnick.


Ubuntist depuis Noël 2006.

Hors ligne

#4 Le 24/01/2012, à 21:44

aduxas

Re : [Résolu] Statistiques en shell : calculer l'occurrence des mots

Une solution awk (qui ne trie pas)

awk -F= '{sum[$2]+=1} END{for( i in sum ) print i,sum[i]}' z

Dernière modification par aduxas (Le 24/01/2012, à 21:50)

Hors ligne