[shell] transformer un string en array...

transformer un string en array... [shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 20-10-2003 à 18:28:18    

et oui c'est encore, et oui c'est encore une question toute con.
 
j'ai cherché mais j'ai pas trouvé...
 
comment transformer une chaine du genre "1,2,3,4,5" en tableau?
 
j'ai essayé avec awk et perl sans succès
 
perl :  
 

Code :
  1. r=`perl -e 'split(/,/, "1,2,3,4,5" )'`


 
ne renvoie rien :(
 
et awk :
 

Code :
  1. r=`echo "1,2,3,4,5,6" | awk '{split($1,a,"," ); for (i=1; i<=10; i++) print a[i]}'`


 
et là ça renvoie 1 2 3 4 5 6
 
 
même si mon awk c'est un peu portnawak, le perl devrait marcher au moins, non?


Message édité par duch le 20-10-2003 à 18:30:20
Reply

Marsh Posté le 20-10-2003 à 18:28:18   

Reply

Marsh Posté le 20-10-2003 à 18:33:02    


Il me semble que bash ne sais pas le faire, mais bien csh et tcsh

Reply

Marsh Posté le 20-10-2003 à 18:35:04    

ah oups, pour une fois, j'ai pas fait de boulette alors
 
[mode question stupide]
c'est quoi la différence entre bash, csh et tcsh?
[mode question stupide]

Reply

Marsh Posté le 20-10-2003 à 19:06:58    

Reply

Marsh Posté le 20-10-2003 à 19:20:44    

Reply

Marsh Posté le 20-10-2003 à 19:25:04    

test ok
 
#!/bin/sh
 
t[0]=coucou
t[1]=ok
 
echo ${t[1]}
 
>>>>>>>>   ok  

Reply

Marsh Posté le 20-10-2003 à 19:42:09    

encore plus simple  
 
r=(12 15 38 5 127 99)
 
echo ${r[2])  
 
les tableaux sont possibles avec bash

n°342466
duch
Posté le 21-10-2003 à 10:33:28  profilanswer
 

petit détail :
 
le tableau est passé en paramètres dans l'appel du script...
 
aucune des solutions que tu donnes ne fonctionne old, désolé :(

n°342473
duch
Posté le 21-10-2003 à 10:58:08  profilanswer
 

remarque si je fais un truc dans le genre :
 
appel du script :
 
./monscript "1 2 3 4 5 6"
 
 
en utilisant un truc du genre eval dans le script y'a un moyen?

n°342477
arsunik
ma tuxitude me beastifie
Posté le 21-10-2003 à 11:10:02  profilanswer
 

Code :
  1. a="1 2 3 4 5"
  2. eval t=\($a\)
  3. echo $t[2]


 
edit : si tu faisais tout ton script en perl, ça serait surement beaucoup plus simple ;)


Message édité par arsunik le 21-10-2003 à 11:11:05
mood
Publicité
Posté le 21-10-2003 à 11:10:02  profilanswer
 

n°342564
bobuse
Posté le 21-10-2003 à 13:51:22  profilanswer
 

duch a écrit :

petit détail :
 
le tableau est passé en paramètres dans l'appel du script...
 
aucune des solutions que tu donnes ne fonctionne old, désolé :(


ben du genre :
 

#!/bin/sh
 
nb=$#
 
i=1
while [ $# -ge 1 ]; do
  truc[${i}]=$1
  i=`expr $i + 1`
  shift
done
 
for i in `seq $nb`; do
  echo "$i : ${truc[$i]}"
done

Reply

Marsh Posté le 21-10-2003 à 17:27:45    

ah bah oui mais je ne passe pas que ces paramètres là à l'appel du script.
 
mais au final c'est ce que j'ai fait, une boucle sur tous les paramètres à partir du 4ème (dans mon cas).
 
le blème c'est que je ne peux pas mettre d'autres paramètres ensuite.

Reply

Marsh Posté le 21-10-2003 à 17:45:34    

ben sinon, tu mets des options pour delimiter tout ca du genre :
./test.sh --liste 1 2 3 4 ... --autre_option
quand tu as le paramètre '--liste' tu lis les trucs, et puis dès que tu as une nouvelle option, tu la reconnais avec le '--'

Reply

Marsh Posté le 21-10-2003 à 17:55:33    

Pourquoi ne pas garder le string :love:, c'est pas joli ?
 
 
-> je sors ....  :D  :D  :D

Reply

Marsh Posté le 21-10-2003 à 18:00:40    

yes why not.
 
l'option de bobuse me semble bonne.
 
M'enfin pour l'instant j'ai réussi à me demmerder comme ça :D
 
 
pendant que je suis là, quelqu'un sait comment écrire une ligne après une ligne particulière d'un fichier?
 
je voudrais pouvoir ajouté une ligne après la ligne 79 d'un fichier par exemple et pas à la fin (ça je sais faire avec >> ).
 
Notez que j'ai trouvé le numéro de la ligne grâce à un grep.
 
Avec vi ça doit être possible, mais c'est bourrin


Message édité par duch le 21-10-2003 à 18:03:36
Reply

Marsh Posté le 21-10-2003 à 18:35:44    

ah bah j'ai trouvé :D
 
bourrin :
 

Code :
  1. ed monfichier << EOF
  2. 79
  3. +
  4. i
  5. hello world
  6. .
  7. w
  8. q
  9. EOF


Message édité par duch le 21-10-2003 à 18:35:56
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed

© 2018 Forum. All Rights Reserved.