Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/03/2016, à 10:32

mathieudex

[Résolu] Aide sur un script stats lettres

Bonsoir,

J'ai suivi le cours sur OpenClassRoom qui dure une trentaine d'heures pour apprendre les bases de linux.

Je dois exécuter la tâche suivante :

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
etc ....

Voici ce que j'ai fait pour le moment :

#!/bin/bash
# Script statistiques sur l'utilisation des lettres dans une langue
# Le fichier dico sera notre base de mots contenant un mot par ligne

dico=$1
# Contient le premier paramètre

if [ -z $1 ]
then

    echo " Pas de paramètre fichier dictionnaire inconnu "
else
    echo " Paramètre présent fichier dictionnaire existe bel et bien"


for lettre in {A..Z}
# Lettre de A à Z

do
   printf "%s - %s\n" $(grep -ic $lettre "$dico")  $lettre
# Nombres d'occurences de la lettre dans le fichier dico

done | sort -rn

fi

Pour l'instant tous fonctionnent parfaitement sauf que maintenant je voudrais à l'aide d'un deuxième paramètre que les lettres s'affichent dans l’ordre alphabétique :

Pour donner quelques choses comme ça :

229938 -A
...... - B
...... - C

etc ...

voici le fichier dico à utiliser : dico à télécharger

Une explication serait la bienvenue. Je vois pas comment faire ça ...
Merci d'avance aux personnes qui m'aideront à réaliser ce projet

Dernière modification par mathieudex (Le 17/03/2016, à 16:38)

Hors ligne

#2 Le 16/03/2016, à 11:16

pingouinux

Re : [Résolu] Aide sur un script stats lettres

Re-bonjour,
Il suffit de trier sur le 3ème champ :
Remplacer

done | sort -rn

par

done | sort -k3

Hors ligne

#3 Le 16/03/2016, à 11:24

mathieudex

Re : [Résolu] Aide sur un script stats lettres

Merci ça marche impeccable mais que signifie -k3 ?

Même en m'aidant de ce site http://www.linux-france.org/article/memo/node9.html     je ne comprend pas

Est ce que c'est possible d'afficher dans un premier temps sort-rn  puis par la suite -k3 ?

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

Cordialement

Dernière modification par mathieudex (Le 16/03/2016, à 11:26)

Hors ligne

#4 Le 16/03/2016, à 12:04

pingouinux

Re : [Résolu] Aide sur un script stats lettres

mais que signifie -k3 ?

Voir man sort, dont voici un extrait :

-k, --key=KEYDEF
              sort via a key; KEYDEF gives location and type
............................................................................
       KEYDEF  is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
       F is a field number and C a character position in the field;  both  are
       origin 1, and the stop position defaults to the line's end.  If neither
       -t nor -b is in effect, characters in a  field  are  counted  from  the
       beginning of the preceding whitespace.  OPTS is one or more single-let‐
       ter ordering options  [bdfgiMhnRrV],  which  override  global  ordering
       options  for  that key.  If no key is given, use the entire line as the
       key.

À ta place, je ferais plutôt le test de début comme ceci, afin de vérifier que le paramètre est vraiment un fichier :

if [ ! -f "$1" ]

Est ce que c'est possible d'afficher dans un premier temps sort-rn  puis par la suite -k3 ?

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

Est-ce que tu veux indiquer en second paramètre la façon de trier ?

Hors ligne

#5 Le 16/03/2016, à 13:04

mathieudex

Re : [Résolu] Aide sur un script stats lettres

pingouinux a écrit :

mais que signifie -k3 ?

Voir man sort, dont voici un extrait :

-k, --key=KEYDEF
              sort via a key; KEYDEF gives location and type
............................................................................
       KEYDEF  is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
       F is a field number and C a character position in the field;  both  are
       origin 1, and the stop position defaults to the line's end.  If neither
       -t nor -b is in effect, characters in a  field  are  counted  from  the
       beginning of the preceding whitespace.  OPTS is one or more single-let‐
       ter ordering options  [bdfgiMhnRrV],  which  override  global  ordering
       options  for  that key.  If no key is given, use the entire line as the
       key.

À ta place, je ferais plutôt le test de début comme ceci, afin de vérifier que le paramètre est vraiment un fichier :

if [ ! -f "$1" ]

Est ce que c'est possible d'afficher dans un premier temps sort-rn  puis par la suite -k3 ?

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

Est-ce que tu veux indiquer en second paramètre la façon de trier ?

Ha ok merci, je comprend mieux pour le "-k"
J'ai modifié pour vérifier le paramètre
Ouai je voudrais bien en second paramètre faire ceci mais je vois pas trop comment .. j'ai jamais utilisé de double paramètre ^^

Hors ligne

#6 Le 16/03/2016, à 13:23

pingouinux

Re : [Résolu] Aide sur un script stats lettres

Ouai je voudrais bien en second paramètre faire ceci mais je vois pas trop comment ..

1) Une méthode est de remplacer cette ligne

done | sort -rn

par

done | sort $2

et d'appeler le script ainsi

./langstat.sh dico.txt -rn

ou

./langstat.sh dico.txt -k3

2) Une autre méthode est de donner une valeur plus parlante au paramètre, et de tester $2 dans le script :

[ "$2" = alpha ] && param_tri=-k3 || param_tri=-rn
...........................................................................
done | sort $param_tri

L'appel se ferait ainsi :

./langstat.sh dico.txt

ou

./langstat.sh dico.txt alpha

Remarque :
Remplacer ce commentaire

# Nombres d'occurences de la lettre dans le fichier dico

par celui-ci (j'ai corrigé aussi dans l'autre discussion)

# Nombres de lignes contenant la lettre dans le fichier dico

Hors ligne

#7 Le 16/03/2016, à 14:44

mathieudex

Re : [Résolu] Aide sur un script stats lettres

pingouinux a écrit :

Ouai je voudrais bien en second paramètre faire ceci mais je vois pas trop comment ..

1) Une méthode est de remplacer cette ligne

done | sort -rn

par

done | sort $2

et d'appeler le script ainsi

./langstat.sh dico.txt -rn

ou

./langstat.sh dico.txt -k3

2) Une autre méthode est de donner une valeur plus parlante au paramètre, et de tester $2 dans le script :

[ "$2" = alpha ] && param_tri=-k3 || param_tri=-rn
...........................................................................
done | sort $param_tri

L'appel se ferait ainsi :

./langstat.sh dico.txt

ou

./langstat.sh dico.txt alpha

Remarque :
Remplacer ce commentaire

# Nombres d'occurences de la lettre dans le fichier dico

par celui-ci (j'ai corrigé aussi dans l'autre discussion)

# Nombres de lignes contenant la lettre dans le fichier dico

Merci pour tous, tout fonctionne !

Encore merci smile

Hors ligne