Compter occurence de mot

Résolu
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

4 réponses

  1. Modérateur
    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$

    ;-))
    1. Modérateur
      Salut,

      Ben, je vois que tu as fais tout le boulot ;-)
    2. Number one : Jipicy, the big boss.
    3. tres tres fort
      thanks
  2. Modérateur
    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?
    1. 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
      1. Modérateur
        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$

        ;-))
        1. 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".