#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
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
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
Hors ligne