Compter occurence de mot

Résolu
jean -  
 jean -
Bonjour,

comment faire pour compter le nombre d'occurence de tout les mots d'un fichier A. Sachant que la liste des mots est dans un fichier B sous forme d'une colonne ( un mot par ligne ) ?
Le fichier A ne fait pas plus de 100Ko mais je veux eventuellement réaliser cela sur plusieurs fichiers.
commande look (en utilisant la liste de mot comme un dictionnaire) ? grep ?

merci
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
jp@MDK:~/tmpfs ssh$ cat foo.sh
#! /bin/sh

#set -xv

i=0
while read line
do
count=$(egrep -o "\b$line\b" fichA | wc -l)
i=$((i + count))
done < fichB

echo "Total : $i"

jp@MDK:~/tmpfs ssh$ ./foo.sh
Total : 12

jp@MDK:~/tmpfs ssh$

;-))
2
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Ben, je vois que tu as fais tout le boulot ;-)
0
jivef Messages postés 927 Date d'inscription   Statut Membre Dernière intervention   306
 
Number one : Jipicy, the big boss.
0
jean
 
tres tres fort
thanks
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Et le fichier B a combien des mots.
Vu que c'est un mot par ligne alors affiche le résultat de
wc -l < B


Dans le fichier A, que doit-on considerer comme séparateur des mots? Tous caractère de punctuation?
D'une doit être traité comme un seul mot par exemple?
0
jean
 
le fichier B a 600 mots.
J'essaie dans 2 boucles imbriquées une comparaison de chaque mot du fichier avec chaque mot de la liste
for word in $(cat $elem); do
		for ref in $(cat $chemin/refEN.txt); do
			if [ $ref == $word ]; then
				((occu += 1))
			fi
		done
	done
	((val = (occu * 100)/nbmottot))
	echo "pourcentage de mot en anglais $val"


mais sans succes, j'ai des bug, il prend word pour un paragraphe . Je suppose que cela vient du IFS mais je ne sais pas lequel je dois mettre pour avoir mot par mot dans la boucle
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

jp@MDK:~/tmpfs ssh$ cat fichA
Bonjour,

comment faire pour compter le nombre d'occurence de tout les mots d'un fichier A. Sachant que la liste des mots est dans un fichier B sous forme d'une colonne ( un mot par ligne ) ?
Le fichier A ne fait pas plus de 100Ko mais je veux eventuellement réaliser cela sur plusieurs fichiers.
commande look (en utilisant la liste de mot comme un dictionnaire) ? grep ?

merci

jp@MDK:~/tmpfs ssh$ cat fichB
du
de
pour
un
le
par
la

jp@MDK:~/tmpfs ssh$ while read line; do echo -e "$line = \c" && egrep -o "\b$line\b" fichA | wc -l; done < fichB
du = 0
de = 3
pour = 1
un = 4
le = 1
par = 1
la = 2

jp@MDK:~/tmpfs ssh$

;-))
0
jean
 
merci pour ce bout de code.

Mon soucis, c'est que je veux compter le nombre total de mot de mon fichier qui sont compris dans la liste.

avec ton exemple, je voudrais avoir dans une variable, "valeur" par exemple ,le résultat "12" car 12 mots du fichier A sont dans la liste du fichier B

Cela me permet, pour que vous compreniez mieux, de tester si un fichier est en anglais ou pas. J'ai une liste des 600 mots les plus utilisés en anglais, et je décide d'un nombre minimal à partir duquel $valeur doit etre pour "considerer le texte en anglais".
0