Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/04/2011, 12h09   #1
Invité régulier
 
Inscription : janvier 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 12
Points : 5
Points : 5
Par défaut importer un fichier texte dans un tableau

Bonjour,

je suis débutant en shell, et j'essaye d'écrire un script dans lequel je souhaite importer un fichier texte (nommé line_sampling.xy, une suite de nombres réels) dans un tableau.
j'ai trouvé des commandes telles que:
Code :
declare -a tab=($line_sampling.xy)
Code :
set -a tab < line_sampling.xy
mais si je fais un:
il n'en ressort rien
un petit coup de main serait le bienvenu

merci
seb
seb.garcia est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/04/2011, 14h06   #2
Membre éclairé
 
Homme Lilian Herault
Architecte technique
Inscription : juin 2010
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Lilian Herault
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 215
Points : 335
Points : 335
Bonjour,

Vous pouvez essayer ceci :

Code :
1
2
 
set -A tab $(cat fichier)

Mais, à quoi ressemble votre fichier ?
Pourquoi vouloir un tableau, quel est votre besoins ?

Lilian
lilian_h est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/04/2011, 18h09   #3
Invité régulier
 
Inscription : janvier 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 12
Points : 5
Points : 5
l'option -A n'est pas reconnue par set (je suis en bash, ceci explique peut-être cela). si je mets -a, mon echo ne renvoie rien (j'ai pas eu le temps cet après'm de chercher plus sur l'option set)

j'ai un fichier tel que: position1, valeur1; position2, valeur2, etc
sous sa forme actuelle, il s'agit d'un fichier 2 colonnes. mais si j'ai bien compris, il ne peut être lu que comme une succession de valeurs (fichier 1 colonne) dans un bash.

je veux manipuler les données 1 (position1, valeur1), puis 2 (position2, valeur2).

je me dis que le plus simple est de faire un tableau, avec une boucle ayant un incrément +2 pour pouvoir bosser sur les données 1 (position1, valeur1) avec i=0 et i+1=1, puis sur les données 2 (position2, valeur2) avec i=2 et i+1=3, etc.

ou alors passer par awk?
seb
seb.garcia est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/04/2011, 18h47   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Il te faut redéfinir le séparateur en entrée (la variable $IFS) comme étant le saut de ligne (\n) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat plop
pos1, val1
pos2, val2
pos3, val3

$ OIFS=$IFS; IFS=$'\n';declare -a tab=( $(cat plop) );IFS=$OIFS

$ echo ${tab[0]}
pos1, val1

$ echo ${tab[2]}
pos3, val3

$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/04/2011, 19h34   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

avec BASH 4, utilisez mapfile.

voir :
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/04/2011, 16h44   #6
Invité régulier
 
Inscription : janvier 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 12
Points : 5
Points : 5
bonjour,

merci pour vos réponses.
mais je suis passé par une autre solution (je n'avais pas accès à une machine hier, seulement à un bout de papier...). ce qui m'a obligé à faire avec mes petites connaissances...

je fais en pseudo-code:
Code :
1
2
3
4
5
6
fich=
while read ligne
do
declare -a tab=($ligne)
#j'ai donc accès aux 2 variables de ma ligne par ${tab[0]} et ${tab[1]}
done < $fich
zipe31: ta solution m'empêche de travailler séparément sur pos1 et var1 car ils appartiennent au même index dans le tableau (cad tab[0]). si j'ai bien tout compris...
N_BaH: j'essayerai la prochaine fois avec mapfile. merci du tuyau

seb
seb.garcia est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/04/2011, 17h07   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par seb.garcia Voir le message
zipe31: ta solution m'empêche de travailler séparément sur pos1 et var1 car ils appartiennent au même index dans le tableau (cad tab[0]). si j'ai bien tout compris...
Qu'à cela ne tienne s'il n'y a que 2 valeurs séparées par une virgule et/ou espace...

Code :
1
2
3
4
5
6
7
8
$ echo ${tab[0]}
pos1, val1

$ echo ${tab[0]%,*}
pos1

$ echo ${tab[0]#* }
val1
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/04/2011, 03h46   #8
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Code :
1
2
3
4
5
6
7
8
9
10
while IFS=', ' read pos val
do
   #pour le fun
   echo "ligne $((++n)) : pos = $pos et val = $val"
   #pour alimenter un tableau
   positions+=( "$pos" )
   valeurs+=( "$val" )
done <fichier2donnees
#pour vérifier le tableau des positions
printf '%s\n' "${positions[@]}"
pour la commande read de la boucle, IFS vaudra <virgule> ou <espace>
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 02/05/2011, 14h27   #9
Invité régulier
 
Inscription : janvier 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 12
Points : 5
Points : 5
Ok, merci à vous deux pour tout.
si avec tout ca je ne deviens pas une bête en tableau
seb
seb.garcia est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h13.


 
 
 
 
Partenaires

Hébergement Web