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:
D'avance merci!
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
Partager