[shell] Tableaux
Résolu/Fermé
jebok
Messages postés
358
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
-
5 juil. 2005 à 16:52
max - 1 mars 2012 à 10:25
max - 1 mars 2012 à 10:25
A voir également:
- [shell] Tableaux
- Tableaux croisés dynamiques - Guide
- Classic shell windows 10 français - Télécharger - Personnalisation
- Fusionner deux tableaux excel - Guide
- Shell do while ✓ - Forum Shell
- À l'aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e -
7 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
5 juil. 2005 à 20:59
5 juil. 2005 à 20:59
Salut,
Essaie comme ça :
Création d'un tableau (mon_tableau) avec trois valeurs (Linux/Windows/MacOSX) :
Essaie comme ça :
Création d'un tableau (mon_tableau) avec trois valeurs (Linux/Windows/MacOSX) :
$ set -A mon_tableau Linux Windows MacOSXAffichage de la valeur "#2" :
$ echo ${mon_tableau[1]} WindowsAffichage de toutes les valeurs :
$ echo ${mon_tableau[*]} Linux Windows MacOSXAjout d'une 4ème valeur :
$ mon_tableau[3]=BeOS $ echo ${mon_tableau[*]} Linux Windows MacOSX BeOS $;-))
boschtoo
Messages postés
250
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
16 octobre 2005
47
5 juil. 2005 à 18:47
5 juil. 2005 à 18:47
Bonjour jebok,
Je ne sais pas si c'est ce que tu cherches, mais voila un exemple dans lequel tu lis les 3 premières colonnes (avec cat) dans un fichier "test" afin de les afficher comme tableau (avec awk) et d'ajuster les colonnes (avec column).
$ cat test|awk '{print $1,$2,$3}'|column -t
pour y accèder par la suite, tu as l'embarras du choix. Tu continues avec des pipes ( | ) en ajoutant des commandes voulues, ou alors tu crées un fichier avec le résultat que tu utilises par la suite.
Je ne sais pas si c'est ce que tu cherches, mais voila un exemple dans lequel tu lis les 3 premières colonnes (avec cat) dans un fichier "test" afin de les afficher comme tableau (avec awk) et d'ajuster les colonnes (avec column).
$ cat test|awk '{print $1,$2,$3}'|column -t
pour y accèder par la suite, tu as l'embarras du choix. Tu continues avec des pipes ( | ) en ajoutant des commandes voulues, ou alors tu crées un fichier avec le résultat que tu utilises par la suite.
Est-ce possible de savoir le "numéro" qu'occupe une valeur dans le tableau ? Par exemple avoir comme réponse que Windows occupe 1...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
31 juil. 2008 à 18:58
31 juil. 2008 à 18:58
En bidouillant un peu, oui :
echo "${mon_tableau[*]}" | tr ' ' '\n' | awk '/Windows/ {print NR-1 }';-))
Bonjour tous le monde,
Voila, après avoir parcouru de nombreux forums, je n'ai toujours pas trouvé la réponse à mon problème.
En Shell bash, je cherche à rentrer dans un tableau les valeurs d'une variables.
En pratique j'ai :
TOTO=VALEUR_TOTO
TATA=VALEUR_TATA
Et j'aimerais mettre dans la 1ère ligne de TITI la VALEUR_TOTO et dans la 2ème VALEUR_TATA.
Quelqu'un pourrait-il m'aider svp.
Merci d'avance.
F.H.
Voila, après avoir parcouru de nombreux forums, je n'ai toujours pas trouvé la réponse à mon problème.
En Shell bash, je cherche à rentrer dans un tableau les valeurs d'une variables.
En pratique j'ai :
TOTO=VALEUR_TOTO
TATA=VALEUR_TATA
Et j'aimerais mettre dans la 1ère ligne de TITI la VALEUR_TOTO et dans la 2ème VALEUR_TATA.
Quelqu'un pourrait-il m'aider svp.
Merci d'avance.
F.H.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
20 déc. 2008 à 09:57
20 déc. 2008 à 09:57
Salut,
Je ne sais pas si j'ai bien tout compris, mais...
Je ne sais pas si j'ai bien tout compris, mais...
[tmpfs]$ TOTO=VALEUR_TOTO [tmpfs]$ TATA=VALEUR_TATA [tmpfs]$ TITI=( $TOTO $TATA ) [tmpfs]$ echo "${TITI[0]}" VALEUR_TOTO [tmpfs]$ echo "${TITI[1]}" VALEUR_TATA [tmpfs]$;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Flying HErmes
Messages postés
2
Date d'inscription
vendredi 19 décembre 2008
Statut
Membre
Dernière intervention
20 décembre 2008
1
20 déc. 2008 à 13:59
20 déc. 2008 à 13:59
Re-bonjour,
J'en profite pour poster une autre question relative aux tableaux en Shell bash.
L'objectif général du script que j'écrit est le suivant :
Je cherche à réaliser une commande qui me lit dans le répertoire courant le nom de tous les fichiers d'une certaine extension (disons .ext) et :
1) si aucun fichier *.ext : me renvoie un message d'erreur
2) si un seul fichier *.ext : lit le nom du fichier
3) si plusieurs fichiesr *.ext : me propose (via select) de choisir parmi tous les fichiers *.ext lequel choisir et lire son nom.
Si la variable EXT contient l'extension des fichiers à rechercher (ex: $EXT=.doc)
alors pour récupérer la liste des fichier portant cette extension je fais :
LIST_FILES=$(find *$EXT)
La variable LIST_FILES contient alors le nom de tous les fichiers portant l'extension .doc
Le problème est que LIST_FILES ne semble pas être un tableau.
En effet si je fais :
echo $LIST_FILES
j'obtiens bien :
fichier1.doc
fichier2.doc
fichier3.doc
Mais si je fais
echo ${#LIST_FILES[*]}
Alors j'obtiens : 1
Comment récupérer la dimension de la variable LIST_FILES. Celle-ci devrait être égale à 3 dans mon exemple précédent.
Une fois cette dimension récupérée (appelons-la NBR_FILES) il ne me restera plus qu'a choisit quoi faire suivant sa valeur :
case $NBRE_FILES
"0") -----> Message d'erreur
"1") -----> Lecture nom fichier
*) -----> Proposition du fichier à lire via SELECT
esac
Et le tour est joué.
Merci pour votre aide.
F.H.
J'en profite pour poster une autre question relative aux tableaux en Shell bash.
L'objectif général du script que j'écrit est le suivant :
Je cherche à réaliser une commande qui me lit dans le répertoire courant le nom de tous les fichiers d'une certaine extension (disons .ext) et :
1) si aucun fichier *.ext : me renvoie un message d'erreur
2) si un seul fichier *.ext : lit le nom du fichier
3) si plusieurs fichiesr *.ext : me propose (via select) de choisir parmi tous les fichiers *.ext lequel choisir et lire son nom.
Si la variable EXT contient l'extension des fichiers à rechercher (ex: $EXT=.doc)
alors pour récupérer la liste des fichier portant cette extension je fais :
LIST_FILES=$(find *$EXT)
La variable LIST_FILES contient alors le nom de tous les fichiers portant l'extension .doc
Le problème est que LIST_FILES ne semble pas être un tableau.
En effet si je fais :
echo $LIST_FILES
j'obtiens bien :
fichier1.doc
fichier2.doc
fichier3.doc
Mais si je fais
echo ${#LIST_FILES[*]}
Alors j'obtiens : 1
Comment récupérer la dimension de la variable LIST_FILES. Celle-ci devrait être égale à 3 dans mon exemple précédent.
Une fois cette dimension récupérée (appelons-la NBR_FILES) il ne me restera plus qu'a choisit quoi faire suivant sa valeur :
case $NBRE_FILES
"0") -----> Message d'erreur
"1") -----> Lecture nom fichier
*) -----> Proposition du fichier à lire via SELECT
esac
Et le tour est joué.
Merci pour votre aide.
F.H.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
20 déc. 2008 à 15:00
20 déc. 2008 à 15:00
LIST_FILES=( $(find *$EXT) );-))
Flying HErmes
Messages postés
2
Date d'inscription
vendredi 19 décembre 2008
Statut
Membre
Dernière intervention
20 décembre 2008
1
20 déc. 2008 à 13:39
20 déc. 2008 à 13:39
Bonjour,
Merci Jipicy pour ta réponse.
C'est effectivement ce que je voulais faire.
Mais je n'ai pas donné toutes les détails (oups !!!)
En fait les variables que je souhaite rentrer dans un tableau, disons TAB, sont les arguments d'une fonction.
Si j'appel la fonction FONCTION de la manière suivante :
FONCTION ${ARG1} ${ARG2} ${ARG3}
j'aimerais alors, au sein de la fonction FONCTION, mettre tout les argument ARGi (avec i=1,2,3) dans le tableau TAB.
Pour l'instant je fais comme ça (interdiction de rire) :
case $# in
"1") TAB=$1;;
"2") TAB=($1 $2);;
"3") TAB=($1 $2 $3);;
esac
C'est fonctionnel... mais comme vous vous en doutez, c'est un peu lourd et cela ne traite qu'un nombre d'arguments fin (1, 2 ou 3 dans l'exemple ci-dessus)i.
J'aimerais systématiser la procédure pour n arguments.
Avez-vous une idée de la marche à suivre?
Merci d'avance.
Flying Hermes
Merci Jipicy pour ta réponse.
C'est effectivement ce que je voulais faire.
Mais je n'ai pas donné toutes les détails (oups !!!)
En fait les variables que je souhaite rentrer dans un tableau, disons TAB, sont les arguments d'une fonction.
Si j'appel la fonction FONCTION de la manière suivante :
FONCTION ${ARG1} ${ARG2} ${ARG3}
j'aimerais alors, au sein de la fonction FONCTION, mettre tout les argument ARGi (avec i=1,2,3) dans le tableau TAB.
Pour l'instant je fais comme ça (interdiction de rire) :
case $# in
"1") TAB=$1;;
"2") TAB=($1 $2);;
"3") TAB=($1 $2 $3);;
esac
C'est fonctionnel... mais comme vous vous en doutez, c'est un peu lourd et cela ne traite qu'un nombre d'arguments fin (1, 2 ou 3 dans l'exemple ci-dessus)i.
J'aimerais systématiser la procédure pour n arguments.
Avez-vous une idée de la marche à suivre?
Merci d'avance.
Flying Hermes
endefu
Messages postés
21
Date d'inscription
lundi 11 mai 2009
Statut
Membre
Dernière intervention
7 septembre 2010
1
Modifié par endefu le 7/09/2010 à 16:08
Modifié par endefu le 7/09/2010 à 16:08
TAB=($*)
Ca marche bien je crois.
Apres si tu veux prendre que les arguments 2 à N :
TAB=(${*:2})
Et si tu veux que les arguments 2 a 2+5, par exemple:
TAB=(${*:2:5})
Apres tu peux t'amuser a plein d'autres trucs comme ca...
19 mars 2007 à 17:46
Merci.
19 mars 2007 à 18:59
Repasse quand tu veux ;-)