# Awk : test si une valeur appartient à un tableau

**URL:** <https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562 "2016-02-21T22:05:04Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![peekpoke](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/ba8739/32.png) [@peekpoke](https://www.debian-fr.org/u/peekpoke)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/1 "2016-02-21T22:05:04Z")

</div>

Bonjour,

J’essaye de tester si une valeur appartient à un tableau. Il doit y avoir une monstrueuse coquille, mais je ne la voit pas.

```nohighlight
#!/usr/bin/awk -f
BEGIN {
  a[1]="Hello"
  a[2]=" World"
  a[3]=" !"
  for ( ndx in a )
    printf("%s",a[ndx])
  print "\n"

  # Pourquoi le test ci-dessous n'affiche rien ?
  if ( "Hello" in a )
    printf( "=> %s",a[1])
  }

```

Le tableau est pourtant bien rempli et son contenu affiché.

Une idée ?

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/2 "2016-02-21T22:05:04Z")

</div>

salut,

`in’ “cherche” dans la liste des indices, et non dans les valeurs d’un tableau

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/3 "2016-02-21T22:05:05Z")

</div>

Au cas où, 4 petits tests qui pourraient servir :

```nohighlight
michel@debG53SW:~$ a[1]="Hello";a[2]="World";a[3]="!"
michel@debG53SW:~$ for elem in ${a[@]}; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in ${a[*]}; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in "${a[@]}"; do echo "\"$elem\""; done
"Hello"
"World"
"!"
michel@debG53SW:~$ for elem in "${a[*]}"; do echo "\"$elem\""; done
"Hello World !"
michel@debG53SW:~$ 

```

---

<div class="post-metadata">

**Author:** ![peekpoke](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/ba8739/32.png) [@peekpoke](https://www.debian-fr.org/u/peekpoke)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/4 "2016-02-21T22:05:05Z")

</div>

Merci à vous deux pour votre réponse si rapide.

@Watel, merci pour l’explication. Je n’avais pas compris le bon usage de “in” en “Awk”.

@MicP, j’avoue qu’il va me falloir un peu de temps pour comprendre la différence entre les différentes notations utilisées en “bash”.

Merci encore.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/5 "2016-02-21T22:05:05Z")

</div>

Le premier indice des tableaux **bash** est **`0`** , aussi, j’ai failli te dire de te méfier des “trous” dans les tableaux car cela pouvait causer des problèmes dans la copie de tableaux.

Mais après quelques essais, je me rends compte que **bash** s’est encore amélioré. 😃

```nohighlight
michel@debG53SW:~$ a[1]="Hello";a[3]="World";a[11]="!" # J'ai un peu poussé la dispersion des éléments du tableau
michel@debG53SW:~$ echo ${!a[@]} # J'affiche la liste des indexs dont les éléments ne sont pas vides
1 3 11
michel@debG53SW:~$ copie=( "${a[@]}" ) # Je créé un autre tableau par copie du tableau
michel@debG53SW:~$ echo ${!copie[@]} # et je constate qu'il n'y a pas de "trous" dans la copie
0 1 2
michel@debG53SW:~$ echo ${!a[@]} # les "trous" sont encore présents dans le tableau original
1 3 11
michel@debG53SW:~$ a=( "${a[@]}" ) # Copie du tableau sur lui même pour "faire le ménage"
michel@debG53SW:~$ echo ${!a[@]}
0 1 2
michel@debG53SW:~$ 

```

---

<div class="post-metadata">

**Author:** ![peekpoke](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/ba8739/32.png) [@peekpoke](https://www.debian-fr.org/u/peekpoke)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/6 "2016-02-21T22:05:05Z")

</div>

Remarquable ! Je ne m’étais jamais intéressé au tableau en bash. Je ne soupçonnais pas que bash soit si puissant avec les tableau. Cela m’ouvre des perspectives intéressantes.

Merci pour le petit cours.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/7 "2016-02-21T22:05:06Z")

</div>

[wiki.bash-hackers.org/doku.php](http://wiki.bash-hackers.org/doku.php)

Après avoir fait quelques recherches, je te transmets quelques liens au sujet de **bash** et de ses tableaux :

[abs.traduc.org/abs-fr/ch27.html](http://abs.traduc.org/abs-fr/ch27.html)

[mywiki.wooledge.org/BashGuide/Arrays](http://mywiki.wooledge.org/BashGuide/Arrays)

---

<div class="post-metadata">

**Author:** ![peekpoke](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/ba8739/32.png) [@peekpoke](https://www.debian-fr.org/u/peekpoke)\
**Post date:** [Février 21, 2016, 10:05 UTC](https://www.debian-fr.org/t/awk-test-si-une-valeur-appartient-a-un-tableau/67562/8 "2016-02-21T22:05:07Z")

</div>

Merci…Merci…Merci… à vous deux ![:038](https://www.debian-fr.org/uploads/default/original/1X/08df484251490af77ba342c0331f3ee271065fe9.gif "bravo")
