Partage

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

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
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

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

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

« 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

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 !

« 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 .. :-/

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

« 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

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

« 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
16 juillet 2018 à 19:19:27

wc -lm < fichier | awk '{print $2-$1}'
« 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
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.
« 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é.
  • Editeur
  • Markdown