Bonjour à tous.
J'ai un fichier dico.txt contenant 323577 mots (un par ligne).
Je souhaite me débarrasser de tous les mots terminant par certains suffixes.
Quand je compte les occurrences correspondant à chacun des suffixes, le résultat semble cohérent avec ce que je compte dans mon éditeur de texte.
Par contre si j'essaye d'enlever les occurrences pour obtenir ma short-list, je n'arrive pas à trouver la syntaxe correcte: caractère de fin de ligne dans la variable (méthode 1) ou dans la boucle (méthode 2)?
Faut-il que je sépare mes suffixes pour la REGEX inclusive #PATTERN# vs. exclusive #[^PATTERN] d'autant qu'avec le caractère de fin de ligne ça doit pas aider…
Bref, là j'ai les yeux qui piquent sévèrement!

Je suis novice en shell-scripting donc j'ai peut être fait des erreurs triviales…
J'utilise zsh par habitude, une partie du problème pourrait venir de ses particularités?

Voici le script:
Code ZSH : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
SUFFIX=("SSENT\\s" "SSIEZ\\s" "ERONT\\s" "AIENT\\s" "ANTE\\s" "SSEZ\\s" "AUX\\s" "S\\s")
SUFFIX2=("SSENT" "SSIEZ" "ERONT" "AIENT" "ANTE" "SSEZ" "AUX" "S")
DICO=`cat dico.txt`
TOTALDICO=`echo $DICO|wc -w`
TOTALSUFFIX=0
 
echo "Nombre initial de mot dans DICO :"$TOTALDICO
echo "Nombre de mots pour chaque SUFFIX :"
 
# On compte les occurences des PATTERN dans le DICO
for ((i=1; i <= ${#SUFFIX}; i++))
do
    COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX[$i]}"`
    TOTALSUFFIX=`expr $TOTALSUFFIX + $COUNTSUFFIX`
    echo $i" "${SUFFIX[$i]}" : "${COUNTSUFFIX}
done
 
RESTEDICO=`expr $TOTALDICO - $TOTALSUFFIX`
 
echo "\nTOTAL = "$TOTALSUFFIX"\n"
echo "Le DICO après suppression devrait contenir "$RESTEDICO" mots ("$TOTALDICO"-"$TOTALSUFFIX")\n"
echo "Suppression des SUFFIX dans le DICO méthode 1:"
 
for ((i=1; i <= ${#SUFFIX}; i++))
do
    COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX[$i]}"`
    DICO=`echo $DICO|grep -E "[^${SUFFIX[$i]}]"`
    COUNTDICO=`echo $DICO|wc -w`
    echo $i" "${SUFFIX[$i]}" : "${COUNTSUFFIX}" reste dans DICO : "${COUNTDICO}
    #echo $DICO > .dico-${i}
done
 
echo "\nNombre final de mot dans DICO :"$COUNTDICO
echo "\nSuppression des SUFFIX dans le DICO méthode 2:"
 
for ((i=1; i <= ${#SUFFIX2}; i++))
do
    COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX2[$i]}\\s"`
    DICO=`echo $DICO|grep -E "[^${SUFFIX2[$i]}]\\s"`
    COUNTDICO=`echo $DICO|wc -w`
    echo $i" "${SUFFIX2[$i]}" : "${COUNTSUFFIX}" reste dans DICO : "${COUNTDICO}
done

Et voici le retour:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Nombre initial de mot dans DICO :323577
Nombre de mots pour chaque SUFFIX :
1 SSENT\s : 6790
2 SSIEZ\s : 6877
3 ERONT\s : 5947
4 AIENT\s : 13202
5 ANTE\s : 1159
6 SSEZ\s : 546
7 AUX\s : 870
8 S\s : 131030
 
TOTAL = 166421
 
Le DICO après suppression devrait contenir 157156 mots (323577-166421)
 
Suppression des SUFFIX dans le DICO méthode 1:
1 SSENT\s : 6790 reste dans DICO : 323577
2 SSIEZ\s : 6877 reste dans DICO : 323577
3 ERONT\s : 5947 reste dans DICO : 323577
4 AIENT\s : 13202 reste dans DICO : 323577
5 ANTE\s : 1159 reste dans DICO : 323577
6 SSEZ\s : 546 reste dans DICO : 323577
7 AUX\s : 870 reste dans DICO : 323577
8 S\s : 131030 reste dans DICO : 323577
 
Nombre final de mot dans DICO :323577
 
Suppression des SUFFIX dans le DICO méthode 2:
1 SSENT : 6790 reste dans DICO : 74988
2 SSIEZ : 6877 reste dans DICO : 28707
3 ERONT : 0 reste dans DICO : 18737
4 AIENT : 0 reste dans DICO : 5707
5 ANTE : 0 reste dans DICO : 5707
6 SSEZ : 0 reste dans DICO : 5707
7 AUX : 870 reste dans DICO : 3347
8 S : 0 reste dans DICO : 3347
D'avance merci!