IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script Bash qui fournit des statistiques sur l'utilisation des lettres dans une langue


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    toulouse
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : toulouse

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut Script Bash qui fournit des statistiques sur l'utilisation des lettres dans une langue
    Bonjour je débute sous linux je me forme au développement PHP et pour ma formation on me demande de créer un script et j ai vraiment du mal car après une rupture d anevrisme j'ai du mal vraiment a assimiler tous les cours PHP alors linux je sature pourriez vous m aider ?

    Merci à vous tous

    l'énoncé est le suivant :
    Je vais vous demander de créer un script Bash qui fournit des statistiques sur l'utilisation des lettres dans une langue. Pour cela, vous allez devoir vous baser sur un fichier de dictionnaire contenant tous les mots de la langue française que vous pouvez télécharger ci-dessous :

    Télécharger le fichier dictionnaire

    Le fichier, tout en majuscules, contient un mot par ligne, comme ceci :

    ABAISSA
    ABAISSABLE
    ABAISSABLES
    ABAISSAI
    ABAISSAIENT
    [...]

    Mission n°1 : combien de fois est utilisée chaque lettre ?

    A partir de ce fichier (dico.txt) vous devez extraire le nombre de mots utilisant chaque lettre de l'alphabet de A à Z. Le script que vous allez créer (langstat.sh) prendra en paramètre le nom du fichier dictionnaire à analyser :

    ./langstat.sh dico.txt

    Le résultat affiché dans la console devrait ressembler à ceci, de la lettre la plus utilisée à la moins utilisée:

    278814 - E
    229938 - A
    219131 - I
    210391 - R
    207889 - S
    179165 - N
    176030 - T
    158282 - O
    [...]

    Cela signifie que la lettre E apparaît dans 278814 mots du dictionnaire, la lettre A dans 229938 mots, etc.
    Mission n°2 : un peu de créativité !

    Une fois que vous aurez réalisé la première mission, vous devrez créer une fonctionnalité supplémentaire dans votre script. Cette fonctionnalité pourra être activée par la présence d'un second paramètre que vous devez inventer :

    ./langstat.sh dico.txt --second-parametre

    Soyez créatifs ! Le second paramètre peut simplement changer la façon dont sont affichées les données, ou peut fournir d'autres statistiques. Plus vous serez original et créatif, meilleure sera votre note. ;o)
    Le barème

    Vous serez noté sur plusieurs critères :

    Afficher le nombre de fois que chaque lettre est utilisée au moins une fois dans un mot (mission n°1)
    Vérifier la présence du paramètre indiquant le nom du fichier dictionnaire à utiliser
    Vérifier que le fichier dictionnaire existe bel et bien
    Ne pas laisser de fichier temporaire de travail sur le disque
    Proposer une seconde fonctionnalité originale à partir d'un second paramètre (mission n°2)
    Fournir quelques commentaires dans le script expliquant son fonctionnement

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    pourquoi demander de l'aide sur un autre site que celui sur lequel tu as trouvé cet exercice ?
    ce sujet y a été traité de nombreuses fois, et tu y trouveras aussi des solutions.

    on ne fera, de toute façon, pas l'exercice à ta place !

    alors, que proposes-tu ? qu'as-tu commencé à faire ?
    quel algorithme envisages-tu de coder ?

    PS : quel rapport entre PHP et bash ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Mission n° 1: tu boucles sur chaque ligne, puis sur chaque lettre du mot
    Pour boucler sur chaque ligne du fichier
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat dico.txt |while read mot; do
        echo "$mot"
    done

    Pour boucler sur chaque mot de la ligne, il te faut d'abord avoir la longueur du mot ${#mot} puis tu instancies une boucle avec "i" allant de 1 à cette longueur et tu coupes le mot sur cette valeur => echo "$mot" |cut -c$iEnsuite ne te reste qu'à tester. Ou plus simple, utiliser un dictionnaire pour compter les lettres. Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    declare -A dico
    dico["A"]=5
    dico["B"]=8
    etc etc

    Donc ici, ce serait un truc type dico[$lettre]=$((${dico[$lettre]} + 1)) puis enfin ne reste qu'à afficher dico.

    Mission n° 2: va voir du cote de getopts ou getopt. La première est une instruction interne shell, la seconde est un outil externe mais les deux ont le même but.

    Citation Envoyé par icedenice Voir le message
    j'ai du mal vraiment a assimiler tous les cours PHP alors linux je sature
    Mouais, super. Tu compares php (un langage) avec Linux (un système d'exploitation) et tu nous demandes de t'aider en shell (un autre langage). Bon bref...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Futur Membre du Club
    Homme Profil pro
    toulouse
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : toulouse

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Merci pour cette petite explication.formation pour devenir développeur PHP et dans ma formation j'ai un module Linux car je doit connaitre les commandes de base.

    les dévelopeurs de mon équipe m'ont dit que je n'aurais jamais de script à faire juste connaitre les commandes de base est normal mais sa fait parti de la formation

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    J'ai un doute sur la solution de Sve@r qui compte le nombre de fois que l'on rencontre une lettre:
    A partir de ce fichier (dico.txt) vous devez extraire le nombre de mots utilisant chaque lettre de l'alphabet de A à Z
    Et si c'était juste compter le nombre de fois que l'on rencontre une lettre, une simple boucle suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while read -N 1 ca
    do
      if [[ "$ca" =~ [A-Z] ]]
      then
        ...
        ...
      fi
    done
    ou plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -o [A-Z] dico.txt | sort | uniq -c

  6. #6
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    en fait l'énoncé est mal posé, puisqu'il précise par la suite que pour la lettre E par exemple on devrait trouver 278814, or si on compte réellement chaque lettre on tombe plutôt sur 483072

    on peut supposer que l'auteur compte le nombre de lettres à coups de grep -c, erreur fréquente qui ne comptabilise qu'une occurrence par ligne (partant de là on est en droit de remettre la qualité du tuto/mooc en question, avis perso), et le tout devant en plus être trié...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ for i in {A..Z}; do printf "%6s - %s\n" "$(grep -c $i dico.txt)" "${i}"; done | sort -rnk1
    278814 - E
    229938 - A
    219131 - I
    210391 - R
    ...
    par ailleurs on trouve les corrections de l'exercice à peu près partout sur le net, dans des dépôts github etc.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    J'ai un doute sur la solution de Sve@r qui compte le nombre de fois que l'on rencontre une lettre:
    A partir de ce fichier (dico.txt) vous devez extraire le nombre de mots utilisant chaque lettre de l'alphabet de A à Z
    Yes, pardon, ma faute. J'ai lu vite fait et compris "le nombre de lettres de chaque valeur présents dans le dico"...

    Bon enfin l'idée de base reste la même: on boucle sur les mots puis on boucle sur les lettres (ou inversement). Et effectivement grep permet alors de s'affranchir d'une boucle tout en faisant le même travail 100 fois plus rapidement qu'en shell pur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/09/2015, 15h47
  2. [11gR2] Statistique sur l'utilisation des packages
    Par zephyrin dans le forum Oracle
    Réponses: 0
    Dernier message: 10/04/2015, 12h03
  3. [1.x] Faire des statistiques sur l'usage des liens d'un site
    Par Illiyan dans le forum Symfony
    Réponses: 1
    Dernier message: 22/02/2010, 13h47
  4. [MySQL] Obtenir des statistique sur l'utilisation de la bdd
    Par duplo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/09/2005, 00h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo