Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP final reprennez le controle à l'aide de linux

mission n°1

    7 octobre 2019 à 13:39:18

    Bonjour à tous,

    pour la mission n°1 j'ai le code suivant qui me permet d'attribuer un nombre à chaque lettre

    A=`egrep [A] dico.txt | wc -l`
    B=`egrep [B] dico.txt | wc -l`
    C=`egrep [C] dico.txt | wc -l`
    D=`egrep [D] dico.txt | wc -l`
    E=`egrep [E] dico.txt | wc -l`
    
    echo 'A='$A
    echo 'B='$B
    echo 'C='$C
    echo 'D='$D
    echo 'E='$E
    

    ce script bash me permet d'obtenir les résultats attendus.

    SAUF que je suis incapable de d'articuler la commande

    sort -nr

    pour me permettre les trier comme demandé dans l'exercice.

    Avez vous des pistes?

    je suis conscient que ma méthode n'est pas la plus optimale notamment sur ce qui concerne le traitement de chacune des lettres et les valeurs qui s'y rapportent.

    merci.


    • Partager sur Facebook
    • Partager sur Twitter
      7 octobre 2019 à 14:46:58

      salut,

      ce script bash me permet d'obtenir les résultats attendus.

      je ne crois pas.
      ton grep |wc -l compte le nombre de lignes sur lesquelles une lettre donnée est présente, et pas le nombre de fois qu'une  lettre donnée apparaît dans le texte.

      quant à ton "problème" avec sort... tu n'en es pas encore là.
      tu dois d'abord programmer la répétition de la commande grep|wc (corrigée) pour chaque lettre de l'alphabet

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        8 octobre 2019 à 10:22:04

        Salut,

        "vous devez extraire le nombre de mots utilisant chaque lettre de l'alphabet de A à Z"

        Donc je dois extraire le nombre de mot qui contienne la lettre "A" puis le nombre de mot qui contiennent la lettre "B" etc...

        En photo, mon script et le résultat.

        Comme les mots sont de 1 par ligne, il cherche le nombre de ligne où le caractère apparait.

        Les chiffres sont les même que sur la capture écran du TP.

        Pour la répétition,

        J'ai essayé: "for les lettres contenues dans l'ensemble de A à Z, do chercher chacune des lettres et donner le nombre de ligne où elle se trouve.

        echo"nombre - lettre" dans un fichier stat.txt

        done

        sort dans l'ordre décroissant le fichier stat.txt."

        sans succès.  j'ai l'impression l'ensemble {A..Z} n'est pas reconnu. Ensemble {A..Z} vu sur le forum, ce qui permet d'éviter de lister toutes les lettres et d'en louper une.

        #!/bin/bash
        
        clear
        touch stat.txt
        
        for lettre in {A..Z}
        do nombre=`egrep [$lettre] | wc -l`
        echo"$nombre - $ lettre">>stat.txt
        done
        sort -nr stat.txt

        Bon, je suis débutant en programmation... mais je fais au max pour obtenir mon certificat ;)

        • Partager sur Facebook
        • Partager sur Twitter
          8 octobre 2019 à 15:38:18

          touch est inutile : le fichier est créé lors de la redirection.

          ton script doit être exécutable pour que le shebang soit pris en compte, et que ce soit effectivement bash qui l'exécute, et donc que {A..Z} soit reconnu.

          le fichier intermédiaire est inutile; tu peux piper le for vers sort.

          -
          Edité par dantonq 8 octobre 2019 à 15:38:48

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            13 octobre 2019 à 17:52:11

            Bonjour, désolé pour le retour tardif.

            J'ai mis mon script bash dans un des dossiers /bin.

            J'ai attribué chmod 777 au script  que j'ai créé pour le TP (langstat.sh).

            l'ensemble {A..B} ne semble toujours pas reconnu...

            J'ai enlevé le fichier intermédiaire. Je l'avais créé espérant que ce soit plus facile de trier les résultats obtenus avec ce fichier .txt.

            Je continu à chercher et je ferai un retour prochainement.

            merci pour les pistes Dantonq;)

            • Partager sur Facebook
            • Partager sur Twitter
              13 octobre 2019 à 17:57:18

              comment fais-tu exécuter le script ?
              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                17 octobre 2019 à 9:40:45

                Bonjour,

                J'ai suivi tes conseil sans succès,je pense que j'articule mal les commandes...

                En fait, j'ai testé les deux façon suivantes:

                1: je lance en mode console dans le dossier créé spécialement pour le TP ~:openclassrooms/linux/

                ./langstat.sh dico.txt

                et rien.

                2: en placant le script bash dans un dossier /sbin ET le fichier dico.txt (ben oui, la première erreur etait "ne trouve pas le fichier")

                puis en lancant sans preciser le chemin.

                toujours rien.

                Je continue de chercher, peut etre un espace, une mauvaise articulation des commandes...



                • Partager sur Facebook
                • Partager sur Twitter
                  17 octobre 2019 à 12:27:25

                  ton script a changé, postes-en la dernière version.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    19 octobre 2019 à 18:49:50

                    bonjour,

                    voici ma derniere version.

                    #!/bin/bash
                    
                    clear
                    
                    for lettre in {A..Z}
                    do `egrep [$lettre] | wc -l`
                    echo `sort -nr "$nombre - $lettre"`
                    done
                    

                    et voici...

                    En esperant ne pas etre trop affligeant :lol:

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 octobre 2019 à 20:44:30

                      le shebang est /bin/bash
                      le script est exécutable
                      le script est exécuté sans indication de shell, en indiquant son chemin

                      il n'y a pas de raison que {A..Z} ne soit pas reconnu.

                      par contre,
                      grep a besoin d'un fichier auquel être appliqué
                      la substitution de commande exécutera le résultat de la commande; ce n'est pas ce que tu veux ;

                      echo est inutile, et la substitution de commande c'est comme au-dessus
                      et sort doit prendre la sortie de la boucle en entrée, par un pipe.

                      -
                      Edité par dantonq 19 octobre 2019 à 20:45:34

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                        20 octobre 2019 à 11:01:43

                        j'ai enfin un résultat qui prend forme! L'ensemble {A..Z} semble reconnu! mais je n'ai rien changé sur cette ligne...

                        voici le résultat:

                        ./lng.sh: ligne 6: [A] : commande introuvable
                        ./lng.sh: ligne 6: 0 : commande introuvable
                        sort: impossible de lire: A: Aucun fichier ou dossier de ce type
                        ./lng.sh: ligne 6: [B] : commande introuvable
                        ./lng.sh: ligne 6: 0 : commande introuvable
                        sort: impossible de lire: B: Aucun fichier ou dossier de ce type
                        ./lng.sh: ligne 6: [C] : commande introuvable
                        ./lng.sh: ligne 6: 0 : commande introuvable
                        sort: impossible de lire: C: Aucun fichier ou dossier de ce type
                        ./lng.sh: ligne 6: [D] : commande introuvable
                        ./lng.sh: ligne 6: 0 : commande introuvable
                        sort: impossible de lire: D: Aucun fichier ou dossier de ce type
                        ./lng.sh: ligne 6: [E] : commande introuvable
                        ./lng.sh: ligne 6: 0 : commande introuvable
                        sort: impossible de lire: E: Aucun fichier ou dossier de ce type
                        


                        je continue de remanier mon fichier et je reviens! Que je bloque ou non.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 octobre 2019 à 13:53:51

                          la substitution de commande exécutera le résultat de la commande; ce n'est pas ce que tu veux

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                          TP final reprennez le controle à l'aide de linux

                          × 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