#1 Le 19/10/2011, à 22:08
- siho
[Résolu] déterminer le plus long mot d’un fichier ????
Bonsoir ^ ^
Voila il s'agit de :
Écrire un script Shell qui permet de déterminer le plus long mot d’un fichier donné en argument.
j'ai pensé à prendre le fichier en question et à le "découper" de façon à avoir chaque mot dans une ligne, ensuite exécuter la commande wc -L nomFichier (qui retourne la longueur de la plus longue ligne d'un fichier)
Le problème c'est que je ne sais pas comment "découper" le fichier ???
Si vous avez d'autres propositions pour résoudre le problème c'est pas de refus....
Merci, c'est assez urgent !!!
Dernière modification par siho (Le 19/10/2011, à 23:23)
Hors ligne
#2 Le 19/10/2011, à 22:14
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Les TPs c'est à toi de les faires siho ^^
Propose des pistes et je te dit si c'est bon en live si tu veut sur IRC irc://irc.freenode.org/##bash-fr
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 19/10/2011, à 22:21
- pingouinux
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Bonjour,
Ceci devrait convenir :
awk '{for(i=1;i<=NF;i++) {lon=length($i);if(lon>lmax){lmax=lon;mot=$i}}}END{printf("%s %s\n",mot,lmax)}' fichier
Hors ligne
#4 Le 19/10/2011, à 22:21
- siho
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Non en fait je ne vous demande pas de faire le TP à ma place... j'ai une piste (je l'ai d'ailleurs écrite) mais je ne sais pas comment la coder en shell bash...?
Hors ligne
#5 Le 19/10/2011, à 22:25
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
1) recuperer les arguments dans un tableau
2) iteter sur ce tableau pour savoir si l'item est plus long que le plus long deja parcouru: si plus long, stocker ce nom dans une variable
3) afficher le plus long
Tout ca en pur bash.
@pingouinux, il fait un TP, on lui demande du bash et ca l'aide pas de lui donenr la réponse toute faite
Dernière modification par sputnick (Le 19/10/2011, à 22:33)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#6 Le 19/10/2011, à 22:26
- siho
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Merci pingouinux pour votre réponse mais j'avoue ne pas avoir compris grand chose
désolée je débute en linux, mais il serait possible de m'expliquer un peu votre démarche? (si ce n'est pas trop demandé )???????
Merci beaucoup
Hors ligne
#7 Le 19/10/2011, à 22:28
- siho
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Oui sputnick je comprend votre raisonnement mais là où je bloque c'est comment "isoler" chaque mot du fichier pour ensuite le comparer au mot suivant ???
Hors ligne
#8 Le 19/10/2011, à 22:32
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
les arguments de la ligne de commande c'est $@
Pour créer un tableau des arguments :
tableau=( $@ )
Parcours du tableau :
for i in ${!tableau[@]}; do echo ${tableau[i]}; done
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#9 Le 19/10/2011, à 23:00
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Oups désolé, j'ai lu trop vite, je viens de relire, tu a besoin de lire le fichier ligne par ligne avec
while read a; do
echo "$a"
done < "$1"
1) iteter sur chaque ligne du fichier pour savoir si l'item est plus long que le plus long deja parcouru: si plus long, stocker ce nom dans une variable
2) afficher le plus long
Dernière modification par sputnick (Le 19/10/2011, à 23:01)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#10 Le 19/10/2011, à 23:06
- siho
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Donc pour résumer.. je lis le fichier ligne par ligne, et je mets les mots de chaque ligne dans un tableau, duquel j'extraie l'élément le plus long?
Question: comment j'isole chaque mot pour le mettre dans le tableau (PS: c'est mon problème depuis le début) ???
Merci
Hors ligne
#11 Le 19/10/2011, à 23:12
- Bousky
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Tu peux utiliser sed pour inclure des sauts de lignes là où il faut.
Il doit aussi être possible d'utiliser les substitutions bash pour isoler les mots un à un (google est ton ami).
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#12 Le 19/10/2011, à 23:21
- siho
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Ah oui cool le coup du sed je pourrais remplacer chaque espace par un saut de ligne, rediriger le résultat vers un autre fichier puis executer wc -L sur ce fichier
Merci infiniment à tous
Ce forum est génial ^ ^
je marque résolu
Hors ligne
#13 Le 19/10/2011, à 23:27
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
tableau=( $(< fichier) )
pas besoin de sed, juste utiliser le word-spliting à bon escient
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#14 Le 19/10/2011, à 23:32
- sputnick
Re : [Résolu] déterminer le plus long mot d’un fichier ????
#!/bin/bash
# vim:ts=4:sw=4
# utilisation : ./script <fichier>
# initialiser les variables
len=0
maxlen=0
# creer un tableau des chaines du fichier donné en argument à la ligne de commande dans un tableau "tab"
# en utilisant le word-spliting intelligement
tab=( $(< "$1") )
for i in ${!tab[@]}; do # on itere sur le tableau tab : ${!tab[@]} = liste des clefs du tableau
len=${#tab[i]} # on recupere la longueur de la chaine courante : ${#tab[i]} = longueur de l'élément courant
if ((len > maxlen)); then # si la longueur de la chaine courante est supérieur à la plus grande longueur de chaine connu
out=${tab[i]} # alors on garde le nom de l'argument dans la variable out
maxlen=$len # et on met à jour la longueur de la plus grande chaine connu dans maxlen
fi
done
# pour finir, on affiche le plus grand argument connu
echo $out
Dernière modification par sputnick (Le 19/10/2011, à 23:33)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#15 Le 19/10/2011, à 23:44
- pingouinux
Re : [Résolu] déterminer le plus long mot d’un fichier ????
Si on s'autorise l'utilisation de sort et de tail :
#! /bin/bash
for i in $(<"$1"); do echo ${#i} $i;done | sort -n | tail -1
On sort une ligne par mot : longueur mot
On trie sur les longueurs
On ne garde que la dernière ligne
Hors ligne
#16 Le 19/10/2011, à 23:56
- Bousky
Re : [Résolu] déterminer le plus long mot d’un fichier ????
#! /bin/bash for i in $(<"$1"); do echo ${#i} $i;done | sort -n | tail -1
pwned le TP !
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne