[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.
A voir également:
- Awk compter le nombre d'occurence
- Nombre de jours entre deux dates excel - Guide
- Afficher le 0 devant un nombre dans excel - Guide
- Compter le nombre de cellule de couleur excel 2016 - Guide
- Gto nombre episode - Forum Cinéma / Télé
- Great Teacher Onizuka SAISON 2 - Forum Cinéma / Télé
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]];
}
}
}
C'est pas bon ;-((
C'est le nombre d'occurrences consécutives qu'il veut, pas le total, ce fut trop simple autrement ;-))