Posez votre question Signaler

[AWK] nombre d'occurrences d'un mot

sparc5 - Dernière réponse le 11 mai 2009 à 17:37
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.
Lire la suite 

[AWK] nombre d'occurrences d'un mot »

5 réponses
Réponse
+1
moins plus
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
jipicy - 25 sept. 2008 à 17:00
Salut jisisv,

C'est pas bon ;-((

C'est le nombre d'occurrences consécutives qu'il veut, pas le total, ce fut trop simple autrement ;-))
 while read line; do echo -e "$line = "$(grep -c $line fich); done < fich | sort -u
Ajouter un commentaire
Réponse
+1
moins plus
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! 
jenaipas - 11 mai 2009 à 17:37
je sais que le problème est assez vieux par rapport à ma réponse, mais je propose ça:

NR == 1 {ref=$1; cnt=0;} #init

{ if ($1 == ref)
cnt++;
else
{
printf "%s \t%d\n" , ref, cnt;
ref=$1
cnt=1;
}
}
END{
printf "%s \t%d\n" , ref, cnt;
}
Ajouter un commentaire
Réponse
+0
moins plus
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]];
	}
    }
}
Ajouter un commentaire
Ce document intitulé « [AWK] nombre d'occurrences d'un mot » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook