[AWK] nombre d'occurrences d'un mot
sparc5
-
jenaipas -
jenaipas -
Bonjour,
J'aimerais avec AWK, lors de la lecture d'un fichier en entrée, trouver le nombre d'occurrences d'un mot qui se repète d'une ligne à une autre uniquement et si possible afficher le résultat de 2 façons
° Exemple de fichier
Thomas
Thomas
Thomas
Bernard
Bernard
Bernard
Marie
Marie
Marie
Marie
Marie
Thomas
Joel
Joel
° 1er résultat
Thomas = 3
Bernard = 3
Marie = 5
Thomas = 1
Joel = 2
° 2eme résultat
Thomas = 3
Thomas = 3
Thomas = 3
Bernard = 3
Bernard = 3
Bernard = 3
Marie = 5
Marie = 5
Marie = 5
Marie = 5
Marie = 5
Thomas = 1
Joel = 2
Joel = 2
Merci de vos suggestions.
J'aimerais avec AWK, lors de la lecture d'un fichier en entrée, trouver le nombre d'occurrences d'un mot qui se repète d'une ligne à une autre uniquement et si possible afficher le résultat de 2 façons
° Exemple de fichier
Thomas
Thomas
Thomas
Bernard
Bernard
Bernard
Marie
Marie
Marie
Marie
Marie
Thomas
Joel
Joel
° 1er résultat
Thomas = 3
Bernard = 3
Marie = 5
Thomas = 1
Joel = 2
° 2eme résultat
Thomas = 3
Thomas = 3
Thomas = 3
Bernard = 3
Bernard = 3
Bernard = 3
Marie = 5
Marie = 5
Marie = 5
Marie = 5
Marie = 5
Thomas = 1
Joel = 2
Joel = 2
Merci de vos suggestions.
Configuration: Windows XP Internet Explorer 6.0
3 réponses
-
Ceci devrait faire l'affaire:
johand@osiris:~/src/awk$ cat data.txt Thomas Thomas Thomas Bernard Bernard Bernard Marie Marie Marie Marie Marie Thomas Joel Joel johand@osiris:~/src/awk$ cat count.awk { frequencies[$1]++; } END { for (name in frequencies) printf "%s\t%d\n" , name ,frequencies[name]; } johand@osiris:~/src/awk$ awk -f count.awk < data.txt Thomas 4 Bernard 3 Joel 2 Marie 5 -
function affichage1 (nom, occurence) { print nom, occurence } function affichage2 (nom, occurence) { for (i = 0 ; i < occurence; i++) print nom, "=", occurence } NR == 1 {store = $1; occurence=1;} # initialisation NR != 1 { if ( store == $1) occurence++; else { affichage2(store, occurence) # changer suivant affichage voulu store = $1; occurence=1; } } END { affichage2(store, occurence);} # changer ici aussi! -
Et pour le second affichage
johand@osiris:~/src/awk$ cat count.awk BEGIN{ cnt=0; } { if (frequencies[$1] == 0 ) { names[cnt++] = $1; } frequencies[$1]++; } END { for (name in frequencies) { printf "%s\t%d\n" , name ,frequencies[name]; } print "--------------AFFICHAGE 2------------------"; for (i=0; i < cnt; i++) { for (j=1; j <= frequencies[names[i]]; j++) { printf "%s %d\n" , names[i], frequencies[names[i]]; } } }