Partage
  • Partager sur Facebook
  • Partager sur Twitter

Reprenez le contrôle à l'aide de Linux !

exercice langstat

    11 juillet 2018 à 15:18:01

    bonjour a tous cela fait plus de 24 h que je cherche déspérement la réponse a mon probléme dans l'exercice langstat je m'explique on me demande d'écrire dans un premier temps un code qui affiche le nombre de lettre dans le dico.txt ce que je fais ca marche niquel mais impossible d'excuter un sort -nr sur ce fichier regarder tous simplement mon code je me suis tromper ?

    #!/bin/bash
    
    if [ ! $# -ge 1 ] || [ ! -e $1 ]
    then 
    	echo 'Fichier dictionnaire introuvable'
    	exit 1 
    fi 
    
    echo '' > analyse.txt
    
    for lettre in {A..Z}
    do
    	occurences=`grep $lettre $1 | wc -l | sort -nr` >> analyse.txt  
    	echo "$occurence - $lettre"
    done
    
    rm analyse.txt

    sans le sort ca passe niquel le nombre d'occurence s'affiche & tous mais avec le sort seule le nombre de lettre s'affiche ..

    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2018 à 15:55:07

      salut,

      tel que tu as écrit ton script, sais-tu à quoi sert sort ?
      pareil pour wc !

      PS:  et, il n'y a que des majuscules dans le dictionnaire ?

      -
      Edité par dantonq 11 juillet 2018 à 15:55:37

      • Partager sur Facebook
      • Partager sur Twitter
      « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
        11 juillet 2018 à 16:29:51

        dantonq a écrit:

        salut,

        tel que tu as écrit ton script, sais-tu à quoi sert sort ?

        sort sert a trié des numériquement avec l'option n des chiffre 

        pareil pour wc !

        je saute a la ligne a chaque fois pour compter le nombre de lettre.

        PS:  et, il n'y a que des majuscules dans le dictionnaire ?

        oui.

        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2018 à 16:41:43

          mais le sort ne porte pas sur le fichier, à cause du pipe ( | ), il porte sur la sortie de wc.

          traduis-nous, en mots, la ligne occurrences=...

          -
          Edité par dantonq 11 juillet 2018 à 16:42:59

          • Partager sur Facebook
          • Partager sur Twitter
          « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
            11 juillet 2018 à 16:49:07

            ahhhh ouiii

            bah occurences = trouver toute les variable lettre puis compter le nombre de ligne puis trier numériquement et l'ajouter a la fin du fichier analyse.txt

            -
            Edité par JonathanPruvost1 11 juillet 2018 à 17:59:19

            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2018 à 19:14:24

              et ça ne te choque pas ?

              grep va afficher les lignes qui contiennent la lettre, mais si la ligne comporte plusieurs fois la lettre, alors wc ne comptera qu'une ligne, et alors wc est inutile car grep sait le faire... (cf. man grep)
              il faut donc demander à grep d'afficher le motif correspondant uniquement (la lettre), et ensuite compter le nombre de lignes avec wc.

              mais pourquoi trier le compte affiché par wc : il n'affiche qu'un chiffre !

              • Partager sur Facebook
              • Partager sur Twitter
              « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                12 juillet 2018 à 20:23:52

                bonjour dantonq

                je t'avoue que la je suis perdu, je ne comprends rien du tout a ce que tu me dis

                grep affiche le nombre de ligne ou de lettre ?

                quand utilisé wc dans ce cas ?

                quand utiliser sort dans ce cas la ??

                excuse mon imcompetence .. :-/

                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2018 à 21:29:48

                  grep, tout seul, affiche les lignes qui contiennent le motif recherché (dans ton cas une lettre).

                  $ cat fichier
                  requêtas
                  médiatiseraient
                  hâbleries
                  l'énouerait
                  t'étrécissaient
                  couvriras
                  assécherez
                  arriverais
                  espérions
                  $ grep é fichier
                  médiatiseraient
                  l'énouerait
                  t'étrécissaient
                  assécherez
                  espérions
                  $ grep é fichier | wc -l 
                  5
                  $ grep --count é fichier
                  5

                  on voit que les deux dernières commandes sont équivalentes, que wc est donc inutile, et que le compte est erroné : il y a 6 é !

                  wc doit être utilisé quand grep affiche le motif uniquement correspondant (cf. man grep ! ) sur une nouvelle ligne à chaque occurrence, qu'elle se trouve seule ou plusieurs fois dans une ligne du dictionnaire.

                  sort doit être utilisé, en dehors de la boucle, quand tout le dictionnaire a été lu

                  -
                  Edité par dantonq 12 juillet 2018 à 21:30:16

                  • Partager sur Facebook
                  • Partager sur Twitter
                  « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                    16 juillet 2018 à 14:02:44

                    bonjour,

                    desolé du temps de réponse j'ai étais pas mal occupé. j'ai amélioré mon code.

                    #!/bin/bash
                    
                    
                    if [ ! $# -ge 1 ] || [ ! -e $1 ]
                    then 
                    	echo 'Fichier dictionnaire introuvable'
                    	exit 1 
                    fi 
                    
                    echo '' > stats.txt
                    
                    for lettre in {A..Z}
                    do
                    	occurences=`grep -o $lettre $1 | wc -l`
                    	echo "$occurences - $lettre" >> stats.txt
                    done
                    
                    if [ $# -ge 2 ] && [ $2 = '-p' ]
                    then
                    	total=`wc -m $1`
                    	echo $total
                    else 
                    	sort -nr stats.txt
                    
                    fi
                    rm stats.txt
                    

                    j'aimerais ajouté un deuxiéme paramétre. du genre avec un -p ajouté le pourcentage de lettre utilsé

                    sauf que la comande wc - m qui est censé compter les caractéres compte egalement le nombre de ligne ce qui est trés pénible comment compter uniquement les caractére sans les lingne ?

                    sur un dico2.txt j'ai écrit de ( AA juqua ZZ) et au lieux d'avoir a faire un 26 x2 ce qui me donne 52 j'ai un 26 x 3 qui me donne 78 )

                    je n'ai pas trouvé de solution sur le net

                    merci de votre aide

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juillet 2018 à 17:29:03

                      wc -m donne le nombre de tous les caractères
                      (caractères visibles + retours à la ligne (wc -l)).

                      -
                      Edité par dantonq 16 juillet 2018 à 17:29:21

                      • Partager sur Facebook
                      • Partager sur Twitter
                      « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                        16 juillet 2018 à 18:30:39

                        dans ce cas quel commande utilisé pour avoir le total de lettres le placé dans une variable et effectué des opération sur celle ci ? je ne trouve pas
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juillet 2018 à 19:19:27

                          wc -lm < fichier | awk '{print $2-$1}'
                          • Partager sur Facebook
                          • Partager sur Twitter
                          « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.
                            16 juillet 2018 à 20:28:15

                            c'est génial merci :-) si j'aibien compris awk permet de faire des calcul directement sur les paramétre de la commance wc j'étais en train de faire le même genre de chose en essayant d'affecter des variables puis de les soustraire une galére pour moi je te remercie de ton aide
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 juillet 2018 à 21:30:07

                              awk lit des champs sur chaque ligne d'un fichier, ou, ici, de son entrée standard.
                              il ne faut pas confondre les champs de awk et les paramètres positionnels d'un script.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              « un problème clairement exposé est à moitié résolu. » | je ne réponds pas aux questions techniques par MP.

                              Reprenez le contrôle à 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