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 01/04/2018, à 09:47

selem5962

[Résolu] Script Bash - Lecture d'un tableau

Bonjour,
Je me permets de vous solliciter dans le cadre de la réalisation d'un script Bash dans lequel je rencontre une problématique pour lire un tableau INDICE par INDICE et non MOT par MOT.
Il s'agit de lire un fichier et de rentrer chacune de ses lignes dans un tableau.

#Création du tableau tabj :
j=0
while IFS= read -r lignej
do
	tabj[j]=$lignej
	let "j = $j+1"
	
done < fichier.txt

Lorsque j'utilise cette fonction :

#printf '%s\n' "${tabj[@]}"

J'ai les bons résultats qui s'affichent à savoir :
tata
toto
tata toto titi

Par contre avec cette fonction :

u=0
#parcourir le tableau
for mot in ${tab[u]}
do
	echo 'Mot : ' $mot
done

J'obtiens les résultats suivants :
tata
toto
tata
toto
titi

Comment puis je faire pour que la variable $mot contienne 'tata toto titi' et non 'tata' puis 'titi'...
Merci d'avance.

Dernière modification par Ayral (Le 01/04/2018, à 19:33)

Hors ligne

#2 Le 01/04/2018, à 10:07

pingouinux

Re : [Résolu] Script Bash - Lecture d'un tableau

Bonjour,

selem5962 a écrit :
u=0
#parcourir le tableau
for mot in ${tab[u]}
do
	echo 'Mot : ' $mot
done

J'obtiens les résultats suivants :
tata
toto
tata
toto
titi

Tu ne peux pas obtenir ce résultat, sauf si tab[0] contient "tata toto tata toto titi"
- Comment as-tu rempli tab ?
- Tu n'incrémentes pas u dans la boucle.

Hors ligne

#3 Le 01/04/2018, à 10:14

selem5962

Re : [Résolu] Script Bash - Lecture d'un tableau

Je remplis le tableau avec le code suivant :

i=0
while IFS= read -r ligne  
do
	tab[i]=$ligne
	let "i = $i+1"
	
done < fichier.txt

Et j'obtiens une liste mot pat mot lorsque je demande de lire le contenu du tableau. L'une des lignes comprends 3 mots séparés par un espace ce qui provoque à l'affichage de 3 mots l'un en dessous de l'autre.
Des recherches réalisées il ressort que la fonction for fait de la lecture mot à mot contrairement à la fonction while ce qui provoquerait cette erreur de lecture. Je ne sais pas comment contourner ce problème.

Hors ligne

#4 Le 01/04/2018, à 10:29

pingouinux

Re : [Résolu] Script Bash - Lecture d'un tableau

for mot in "${tab[@]}"
do
	echo 'Mot : ' "$mot"
done

Hors ligne

#5 Le 01/04/2018, à 10:33

credenhill

Re : [Résolu] Script Bash - Lecture d'un tableau

hello
une méthode

$ for ix in ${!tab[@]}; do echo 'Mot' ${tab[$ix]}; done
Mot tata
Mot toto
Mot tata toto titi

Hors ligne

#6 Le 01/04/2018, à 10:37

selem5962

Re : [Résolu] Script Bash - Lecture d'un tableau

Merci cela fonctionne, à bientôt.

Hors ligne

#7 Le 01/04/2018, à 15:17

Watael

Re : [Résolu] Script Bash - Lecture d'un tableau

UMQ!

for item in "${tableaul[@]}"; do : whatever with "$item"; done

il faut TOUJOURS mettre des guillemets autour des variables. TOUJOURS !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne