Comportement étrange : grep, REGEX et récursivité…
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!:calim2:
Je suis novice en shell-scripting donc j'ai peut être fait des erreurs triviales…:aie:
J'utilise zsh par habitude, une partie du problème pourrait venir de ses particularités?
Voici le script:
Code:
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:
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!