Bonjour à vous, j’écris ce sujet pour vous demandé conseil !
J'ai fait un script en BASH qui calcule le nombre de mots utilisant chaque lettre de l'alphabet de A à Z.
(exercice Linux semaine 5 TP )
Sauf que le script mais environ 2-3 min à trouver le résultat, le résultat est correct mais long a être trouvé du coup j'aimerais savoir si il y a un moyen de régler ce problème.
voici mon code:
#!/bin/bash
#varTmp='0' for debug script
afficherResultat (){
echo -e "a=$a b=$b c=$c d=$d e=$e f=$f g=$g h=$h i=$i j=$j k=$k l=$l m=$m n=$n o=$o p=$p q=$q r=$r s=$s t=$t u=$u v=$v w=$w x=$x y=$y z=$z" #\nligne=$varTmp" for debug script
}
comparaison (){
case ${lettre,,} in
'a' )
let "a += 1"
;;
'b' )
let "b += 1"
;;
'c' )
let "c += 1"
;;
'd' )
let "d += 1"
;;
'e' )
let "e += 1"
;;
'f' )
let "f += 1"
;;
'g' )
let "g += 1"
;;
'h' )
let "h += 1"
;;
'i' )
let "i += 1"
;;
'j' )
let "j += 1"
;;
'k' )
let "k += 1"
;;
'l' )
let "l += 1"
;;
'm' )
let "m += 1"
;;
'n' )
let "n += 1"
;;
'o' )
let "o += 1"
;;
'p' )
let "p += 1"
;;
'q' )
let "q += 1"
;;
'r' )
let "r += 1"
;;
's' )
let "s += 1"
;;
't' )
let "t += 1"
;;
'u' )
let "u += 1"
;;
'v' )
let "v += 1"
;;
'w' )
let "w += 1"
;;
'x' )
let "x += 1"
;;
'y' )
let "y += 1"
;;
'z' )
let "z += 1"
;;
esac
}
lireDico (){
#Lis le dictionnaire
while read -r line; do
if [ -n "$line" ]; then #Vérifie si la ligne est pas vide
for boucle in $(seq 0 ${#line}); do #Récupère la longueur du mot et le parcours
lettre="${line:boucle:1}" #Récupère chaque lettre du mot un par un
comparaison #Compare la lettre et ajoute +1 a celle qui correspond
done
fi
#let "varTmp += 1" for debug script
done < $cheminDico
afficherResultat #Affiche le resultat trouvé en affichant toute les variables
}
if [ -z $1 ] || [ ! -e $1 ]; then
echo "Erreur le fichier $1 n'existe pas !"
echo "Usage ./langstat.sh 'cheminDico'"
else
cheminDico="$1"
lireDico
fi
Le dictionnaire : http://www.siteduzero.com/uploads/fr/ftp/mateo21/cpp/dico.zip
Salut, je pense qu'il faudrait que tu utilises des commandes comme "grep" ou autres, des commandes intégrés .
Dans ton script tu programmes des fonctionnalités qui existent déjà.
echo `touch stat` # Création d'un fichier temp stat
for L in {A..Z}; do # boucle sur toutes les lettres de A à Z
echo "`grep -c $L $1` - $L " >> stat # grep sur le fichier avec L en paramètre et $1 le fichier dico
done
sort -nr stat | less
Sauf erreur de ma part ça fait la même chose sans les tests -z et -e pour $1
Bon code.
- Edité par Rencho13 19 décembre 2018 à 2:28:02
[POWERSHELL] Conseil pour optimiser mon script ?!
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.