Extraire chaque mot d'une ligne reçu dùn fichier pour le traiter

Résolu/Fermé
BillyV33 - 14 avril 2019 à 00:47
 BillyV33 - 14 avril 2019 à 22:48
Bonjour,

je sais que c'est une question idiote mais là je ne réussi pas à faire ce que je veux!
voilà mon problème:
je veux extraire chaque mot de la ligne reçu.
Normalement, il y a une seule ligne par fichier que ma cmd lit et envoie à mon script.sh
une fois reçue, je voudrais lire le premier mot et le traiter, lire le deuxième mot et le traiter ...
#j'ai essayé avec for mot in "$ligne"; do et autres mais pas réussi
#ici je compte le nbr de mot pour ma boucle for

si mon fichier existe je rentre dans mon if :

if [ -e "$fichier" ]; then

nbr_mot=$(cat "$fichier" | wc -w)

for i in `seq 1 "$nbr_mot"`; do #je ne suis pas sûr que seq est un bon choix...

mot=$(cat "$fichier" | cut -f "$i" -d ' ') #ici j'aimerais que $i change à chaque itération
# mais ça ne fonctionne pas ! pourquoi?

# ici je traiterais $mot
# je rentre dans un case et si par exemple $mot = zero je dois le convertir en 0 et le concaténer avec
# le prochain $mot et ce jusqu'à la fin de la ligne qui contiendra aussi un
# opérateur + - / % * entre les deux chiffres et faire le calcule
#finalement si par exemple j'ai une ligne avec < un deux plus quatre >
# je dois le transformer en 12+4 et afficher 16

done
fi

merci beaucoup!!!




Configuration: Linux / Firefox 60.0
A voir également:

4 réponses

lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13
14 avril 2019 à 02:48
salut,

en bash :
for mot in $(<"$fichier");
do
     echo "$mot"
done
sinon
for mot in $(cat "$fichier")
...
0
Un peux gênée pour la question...! vraiment désolée!
mais ça fonctionne très bien pour cette partie :)
là ça rentre bien dans mon case
ça fait ce qui doit faire MERCIII!!!
pour la concaténation dans une variable fur et à mesure que je converti je fais
conv=$conv$(echo "$mot" | sed -E "s/deux/2/g;")
il me reste à faire le côté calcule :)
merci encore je bloquais sur la partie la plus simple!
vite fait je pense faire $resultat=(($conv)) mais bon...
je vais venir mettre résolu une fois tout testé et terminé

:) merci!!
0
finalement, voici ce que j'ai fait et qu'il fonctionne
if [ -e "$fichier" ]; then
i=0
for mot in $(cat "$fichier"); do

case "$mot" in
"zero")
calcul=$calcul$(echo "$mot" | sed -E "s/zero/0/g;")
;;
"un"
calcul=$calcul$(echo "$mot" | sed -E "s/un/1/g;")
;;
"deux")
calcul=$calcul$(echo "$mot" | sed -E "s/deux/2/g;")
;;
"trois")
calcul=$calcul$(echo "$mot" | sed -E "s/trois/3/g;")
;;
"quatre")
calcul=$calcul$(echo "$mot" | sed -E "s/quatre/4/g;")
;;
"cinq")
calcul=$calcul$(echo "$mot" | sed -E "s/cinq/5/g;")
;;
"six")
calcul=$calcul$(echo "$mot" | sed -E "s/six/6/g;")
;;
"sept")
calcul=$calcul$(echo "$mot" | sed -E "s/sept/7/g;")
;;
"huit")
calcul=$calcul$(echo "$mot" | sed -E "s/huit/8/g;")
;;
"neuf")
calcul=$calcul$(echo "$mot" | sed -E "s/neuf/9/g;")
;;
"plus")
calcul=$calcul$(echo "$mot" | sed -E "s/plus/+/g;")
;;
"moins")
calcul=$calcul$(echo "$mot" | sed -E "s/moins/\-/g;")
;;
"fois")
calcul=$calcul$(echo "$mot" | sed -E "s/fois/\*/g;")
;;
"divise")
calcul=$calcul$(echo "$mot" | sed -E "s/divise/\//g;")
;;
"modulo")
calcul=$calcul$(echo "$mot" | sed -E "s/modulo/%/g;")
;;
  • )

echo "Désolée, il y a une erreur dans le fichier!" >&2
exit 1
;;

esac

i=$((i + 1 ))

done

echo $(($calcul))

fi

J'aimerais savoir si c'est possible de changer dans cut le 1 par une var
mot=$(cat "$fichier" | cut -f "$i" -d ' ')
le tout dans la fameuse bouche for :)

Merci beaucoup encore et encore !!!
(j'attendrai demain pour clore cette question.... trop curieuse de savoir si possible)
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13
14 avril 2019 à 15:12
8O
tout cela est inutilement compliqué.

echo $(( $(sed 's/\bzéro\b/0/g;s/\bun\b/1/g; et ainsi de suite...' tonFichier) ))
0
:):) Merci beaucoup!
effectivement ça fonctionne très bien!
0