Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice Final Reprenez le contrôle à l'aide de L

Sujet résolu
    26 février 2018 à 13:13:05

    Bonjour,

    cela est mon script bash pour l'exercice final "il n'est pas encore fini". bref avec des fichier contenant un nombre pas important des mots sa fonctionne parfaitement mais avec le fichier dico.txt proposé s'a pris plus qu'une heure pour afficher de résultat, chose qui n'est pas bien.

    Je cherche des propositions d'optimisation:

    ###########

    #!/bin/bash

    alphabet="abcdefghijiklmnopkrstuvwxyz"

    for i in $(seq 1 ${#alphabet}); do

            let "val = 0"

            lettre=$(echo $alphabet | cut -c $i)

            for STR in `cat $1`; do

                    for L in $(seq 1 ${#STR}); do

                            if [ $(echo ${STR,,} | cut -c$L) = $lettre ]

                            then

                                    let "val += 1"

                            fi

                    done

            done

            echo "$val-$lettre" >> /root/cours/result.txt

    done

    sort -nr /root/cours/result.txt && rm /root/cours/result.txt

    -
    Edité par HaythemFerjani 26 février 2018 à 13:59:51

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 février 2018 à 14:10:11

      Salut,

      là, effectivement, tu te compliques la vie. Tu compares lettre par lettre du fichier 26 fois. Et ça fait beaucoup ^^

      L'objectif: "vous devez extraire le nombre de mots utilisant chaque lettre de l'alphabet de A à Z."
      Autrement dit combien le nombre de mot qui utilisent la lettre A puis le nombre de mot qui utilisent la lettre B, etc..., jusqu'à Z. Donc si une lettre est présente une ou plusieurs fois dans un mot ( comme A dans Abracadabra) ça compte comme une occurrence ( et non cinq comme dans l'exemple précédent).

      Maintenant, tu n'as donc pas à faire lettre par lettre mais mot par mot. ( indice qui peut te faciliter la vie: A n'est qu'une chaîne de caractère de un caractère et il n'y a qu'un mot par ligne).

      PS:

      for lettre in "abcdefghijklmnopqrstuvwxyz"
      
      # équivaut à
      
      for lettre in {a..z}

      c'est plus simple et ça évite de faire une erreur de frappe dans l'alphabet ( comme un k à la place du q) ;)

      Et A est différent de a ( attention à la casse).

      -
      Edité par Anonyme 26 février 2018 à 14:10:50

      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2018 à 14:40:45

        Merci pour votre réponse,

        Bonjour,

        j'ai essayé cette expression qui marche bien seul:

        # cat file.txt | grep  '[Aa]'| wc -l

        mais je trouve du mal a l'intégrer dans un script bash comme celui ci:

        #!/bin/bash
        
        
        for i in {A..Z}; do
                let "val = 0"
                let "val=$(cat file.txt | grep -i '$i'| wc -l)"
                echo "$val - $i" >> /root/cours/re.txt
        done

        ce code qui me ramène comme résultat:

        0 - A
        0 - B
        0 - C
        0 - D
        0 - E
        0 - F
        0 - G
        0 - H
        0 - I
        0 - J
        0 - K
        0 - L
        0 - M
        0 - N
        0 - O
        0 - P
        0 - Q
        0 - R
        0 - S
        0 - T
        0 - U
        0 - V
        0 - W
        0 - X
        0 - Y
        0 - Z

        -
        Edité par HaythemFerjani 27 février 2018 à 12:08:13

        • Partager sur Facebook
        • Partager sur Twitter
          28 janvier 2019 à 13:45:52

          Hello

          1) Erreur : le $i dans ton grep :

          let "val=$(cat file.txt | grep -i '$i'| wc -l)"  


          ne retourne pas la valeur de la variable i car tu a mis des simple quotes ceux qui échappent le caractère $

          donc il faut les remplacer par des double quotes

          let "val=$(cat file.txt | grep -i "$i"| wc -l)"  

          2) Optimisation , tu peux exécuter directement grep sur le fichier sans passer par cat , et utiliser l'option -c (count) pour éviter l'usage de la commande wc -l 

          let "val=$(grep -ic "$i" file.txt)"  




          -
          Edité par tony9876 28 janvier 2019 à 13:52:36

          • Partager sur Facebook
          • Partager sur Twitter
            28 janvier 2019 à 17:44:57

            HaythemFerjani a écrit:


            Edité par HaythemFerjani 27 février 2018 à 12:08:13


            J'espère pour lui qu'il a fini l'exercice depuis...
            • Partager sur Facebook
            • Partager sur Twitter

            Ubuntu est un terme Bantou qui signifie :"Slackware est trop compliqué pour moi"

            En matière de sécurité, 90% des soucis sont au niveau de l'interface chaise/clavier

              28 janvier 2019 à 22:29:24

              Je n'aime pas les questions sans réponses :p
              • Partager sur Facebook
              • Partager sur Twitter
                13 mars 2019 à 22:19:50

                Moi j'ai réussi, avec des heures de recherche, et surtout un parcours d'apprentissage complet dans un autre langage. Je veux bien partager ma solution et en discuter. Simplement avec le cours, sans expérience de programmation autre, ça me paraît "chaud".
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juin 2019 à 1:49:16

                  Bonjour 

                  Bon je m'excuse pour ne pas répondre. Le travail m'avait pris tout mon temps. 

                  Bref j'ai bien terminé l'exercice avec un code très simple. 

                  Merciiii infiniment 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 octobre 2019 à 16:52:45 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


                      21 janvier 2020 à 17:37:58

                      Bonjour, 

                      Je m'excuse de ne pas publier le script final. Je le cherche pour le publier et j'espère le trouver. 

                      Merci infiniment 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 avril 2020 à 20:57:53

                        c'est clair qu'il faut etre deja initié pour réussir le TP final...
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Exercice Final Reprenez le contrôle à l'aide de L

                        × 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