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 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 sad
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 smile 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 wink


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

pingouinux a écrit :
#! /bin/bash

for i in $(<"$1"); do echo ${#i} $i;done | sort -n | tail -1

lol 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