Menu

Extraire chaque mot d'une ligne reçu dùn fichier pour le traiter [Résolu]

- - Dernière réponse :  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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
120
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
14 avril 2019
5
0
Merci
salut,

en bash :
for mot in $(<"$fichier");
do
     echo "$mot"
done
sinon
for mot in $(cat "$fichier")
...
Commenter la réponse de lEprofSonDkon
0
Merci
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!!
Commenter la réponse de BillyV33
0
Merci
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)
lEprofSonDkon
Messages postés
120
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
14 avril 2019
5 -
8O
tout cela est inutilement compliqué.

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