¿Cómo ver todo el contenido en una matriz awk?

41

En mi opinión, awk array es algo así como Python Dict.

Así que escribo el siguiente código para explorarlo:

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

Y obtuve: awk: can't read value of my_dict; it's an array name.

Como la primera columna no es un número, ¿cómo podría leer el contenido total de la matriz o recorrerlo?

zen
fuente

Respuestas:

60

Puede recorrer las claves de la matriz y extraer los valores correspondientes:

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

Para obtener resultados similares a los que obtendría con un diccionario de Python, también puede imprimir la clave:

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

Esto funciona independientemente del tipo de clave.

Stephen Kitt
fuente
14

Eso recorrería la matriz:

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

i Es el índice.

caos
fuente
9

La matriz en awkno es un objeto de primera clase como diccionario en Python. En awk, el nombre de matriz sin subíndice solo puede usarse en dos contextos :

  • Un parámetro en una definición de función o llamada de función.
  • Token de nombre después de la palabra clave in.

En otro contexto, awkgenerará un error.

Necesita un forbucle para iterar e imprimir el contenido de una matriz:

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