web-dev-qa-db-fra.com

Comment afficher tout le contenu dans un tableau awk?

À ma connaissance, le tableau awk est quelque chose comme python dict.

J'écris donc le code ci-dessous pour l'explorer:

awk '{my_dict[$1] = $2} END { print my_dict}' zen

Et j'ai eu: awk: can't read value of my_dict; it's an array name.

Comme la première colonne n'est pas un nombre, comment pourrais-je lire le contenu total du tableau ou le parcourir?

47
Zen

Vous pouvez parcourir les clés du tableau et extraire les valeurs correspondantes:

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print my_dict[key] } }' zen

Pour obtenir une sortie similaire à celle que vous obtiendriez avec un dictionnaire Python, vous pouvez également imprimer la clé:

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print key ": " my_dict[key] } }' zen

Cela fonctionne quel que soit le type de clé.

67
Stephen Kitt

Cela ferait une boucle à travers le tableau:

END { for (i in my_dict) print my_dict[i] }

i est l'index.

16
chaos

Un tableau dans awk n'est pas un objet de première classe comme un dictionnaire dans Python. Dans awk, le nom du tableau sans indice ne peut être utilisé que dans deux contextes :

  • Un paramètre dans une définition de fonction ou un appel de fonction.
  • Jeton de nom après le mot clé in.

Dans un autre contexte, awk générera une erreur.

Vous avez besoin d'une boucle for pour itérer et imprimer le contenu d'un tableau:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
10
cuonglm