Le plus court mot

Fermé
wakk Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 8 janvier 2011 - 8 janv. 2011 à 16:08
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 8 janv. 2011 à 19:21
Hello!
Je suis sur l'exercice suivant:

Écrire un script, nommé plusCourtMot, prenant en argument le nom d'un dictionnaire (un fichier non vide contenant des mots en français, chacun sur une unique ligne sans blanc superflu) et extrayant (dans l'ordre de ce dictionnaire) les mots de plus courte longueur.

% cat dict1
coucou
le
chien
% cat dict2
le
la
joue

% plusCourtMot dict1
le
% plusCourtMot dict2
le
la

Voici le script que j'ai écrit, mais qui est visiblement incorrect:

#! /bin/bash
mot=""
MAX_L=25
c='wc -m $1'

while read line; do
if [[ $c -lt $MAX_L ]];then
MAX_L=$c
mot=$line
fi
done < $1
echo $((mot))

Mon but est de comparer la valeur retournée par wc -m (compter les caracctères) avec celle de MAX_L. Si c est inférieur à 25 j'affecte à MAX_L la valeur de c, puis à mot j'affecte le mot sur lequel j'ai travaillé. Et cela se fait jusqu'à la fin du fichier.
Selon moi, il y a une première erreur au niveau de la déclaration de c:
c='wc -m $1' je ne suis pas sur que wc -m compte le nbre de caractère d'un mot, mais plus d'un fichier.


Si quelqu'un peut m'aider à corriger ce script ça serait tres gentil à lui.
Merci

3 réponses

jeanbi Messages postés 15118 Date d'inscription samedi 9 décembre 2006 Statut Contributeur Dernière intervention 6 février 2023 2 177
8 janv. 2011 à 16:45
bonjour,
et par la meme faire ton exercice !!
faut peut etre pas rever
a+
0
c='wc -m $1'
non
c='wc -m $1'
ou mieux
c=$(wc -m $1)


PS: ne faites pas attention, c'est le site qui n'affiche pas correctement les backticks :(
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
8 janv. 2011 à 17:43
Salut,

De toute façon la syntaxe est obsolète depuis belle lurette ;-))

De plus il vaut mieux faire :

c=$(cat $1 | wc -m)

Sans quoi le nom du fichier est affiché aussi ;-)
0
wakk Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 8 janvier 2011 2
8 janv. 2011 à 18:10
Merci à vous deux
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
8 janv. 2011 à 18:19
Pour ton problème il vaudrait mieux faire un truc du genre :

- Déterminer la ligne la plus courte et le nombre de lettres (stocker le résultat dans une variable)
- Lire le fichier ligne par ligne, compter son nombre de lettres et le comparer avec la variable du dessus. Si égal, afficher la ligne...


$ cat dic1
coucou
le
chien
la
les
moi
tu
il
nous

$ ./pluscourt.sh dic1
le
la
tu
il

$

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 8/01/2011 à 19:20
Salut,


Sans quoi le nom du fichier est affiché aussi ;-)

On peut faire sans cat ;-)


lami20j@debian-acer:~$ wc -m fic 
17 fic 
lami20j@debian-acer:~$ wc -m < fic 
17
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
8 janv. 2011 à 19:21
Aie,

Pourquoi, t'aimes pas les chats ? ;-))

Merci ;-)
0
wakk Messages postés 5 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 8 janvier 2011 2
8 janv. 2011 à 18:09
si tu n'as pas envi de te répondre je n'oblige personne à m'aider et stp ne me fais pas dire ce que je n'ai pas dis!
0