[bash4] tableau associatif: élément en trop
Résolu
Utilisateur anonyme
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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]}"
done
output: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.