Partage
  • Partager sur Facebook
  • Partager sur Twitter

[POWERSHELL] Conseil pour optimiser mon script ?!

    5 août 2018 à 13:17:26

    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

    • Partager sur Facebook
    • Partager sur Twitter
      19 décembre 2018 à 2:22:06

      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

      • Partager sur Facebook
      • Partager sur Twitter

      [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.
      • Editeur
      • Markdown