#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