[bash4] tableau associatif: élément en trop
Résolu
Utilisateur anonyme
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
en repenant les données de nnj99 (https://forums.commentcamarche.net/forum/affich-18469647-sed-awk-pour-lier-2-fichier-plats j'ai cherché une solution en utilisant bash4, et ses tableaux associatifs, mais la boucle while que j'utilise semble ajouter un élément sans que j'arrive à voir d'où il provient
Vous avez une idée?
merci
en repenant les données de nnj99 (https://forums.commentcamarche.net/forum/affich-18469647-sed-awk-pour-lier-2-fichier-plats j'ai cherché une solution en utilisant bash4, et ses tableaux associatifs, mais la boucle while que j'utilise semble ajouter un élément sans que j'arrive à voir d'où il provient
#!/usr/local/bin/bash declare -A table while read line; do table="${line::5}" champ="${line:11:6}" table[$table]+="$(sed -n '/'"$table"';;'"$champ"'/{s/[^;;]*;;[^;;]*;;\([^;;]*\);;\([^;;]*\);;\([^;;]*\);;.*/\1 \2 (\3)/ s/ C / Char / s/ D / Date / s/ N / Number / p;q}' ${file2}), " done < ${file1} #unset table[0] for i in "${!table[@]}"; do printf 'CREATE TABLE %s (%s\b\b);\n' "$i" "${table[$i]}" doneoutput:
CREATE TABLE tab01 (champ1 Date (08), champ2 Number (05), champ3 Char (50)); CREATE TABLE tab02 (champ1 Date (08), champ2 Number (05)); CREATE TABLE 0 (tab);Je peux le zapper en décommentant unset, mais c'est pas terrible :(
Vous avez une idée?
merci
A voir également:
- [bash4] tableau associatif: élément en trop
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
Salut,
Il faut faire attention au nom des variables.
table="${line::5} - ici tu ajoutes un élément au tableau table
Mets plutôt
Dans ton code tu remarques qu'avant de commencer remplir le tableau avec sed il y a déjà un élément.
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
Il faut faire attention au nom des variables.
table="${line::5}" champ="${line:11:6}" table[$table]+
table="${line::5} - ici tu ajoutes un élément au tableau table
Mets plutôt
t="${line::5}" champ="${line:11:6}" table[$t]+
Dans ton code tu remarques qu'avant de commencer remplir le tableau avec sed il y a déjà un élément.
lami20j@debian-acer:~$ cat bb2.sh #!/usr/local/bin/bash declare -A table file1="fic1" file2="fic2" while read line; do t="${line::5}" champ="${line:11:6}" echo "---- ${#table[@]} élément(s)" table[$t]+="$(sed -n '/'"$table"';;'"$champ"'/{s/[^;;]*;;[^;;]*;;\([^;;]*\);;\([^;;]*\);;\([^;;]*\);;.*/\1 \2 (\3)/ s/ C / Char / s/ D / Date / s/ N / Number / p;q}' ${file2}), " done < ${file1} for i in "${!table[@]}"; do printf 'CREATE TABLE %s (%s\b\b);\n' "$i" "${table[$i]}" done lami20j@debian-acer:~$ sh bb.sh ---- 1 élément(s) ---- 2 élément(s) ---- 2 élément(s) ---- 2 élément(s) ---- 3 élément(s) CREATE TABLE tab01 (champ1 Date (08), champ2 Number (05), champ3 Char (50)); CREATE TABLE tab02 (champ1 Date (08), champ2 Number (05)); CREATE TABLE 0 (tab); lami20j@debian-acer:~$ sh bb2.sh ---- 0 élément(s) ---- 1 élément(s) ---- 1 élément(s) ---- 1 élément(s) ---- 2 élément(s) CREATE TABLE tab01 (champ1 Date (08), champ2 Number (05), champ3 Char (50)); CREATE TABLE tab02 (champ1 Date (08), champ2 Number (05)); lami20j@debian-acer:~$
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
J'avais mis des echos de partout sauf là où tu as mis les tiens ;-\
un instant je l'ai oublié :((
merci lami20j.