Como visualizar todo o conteúdo em uma matriz awk?

41

No meu entendimento, o awk array é algo como python dict.

Então, escrevo o código abaixo para explorá-lo:

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

E eu tenho: awk: can't read value of my_dict; it's an array name.

Como a primeira coluna não é um número, como eu poderia ler o conteúdo total da matriz ou percorrê-lo?

zen
fonte

Respostas:

60

Você pode fazer um loop sobre as chaves da matriz e extrair os valores correspondentes:

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

Para obter resultados semelhantes aos obtidos em um dicionário Python, você também pode imprimir a chave:

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

Isso funciona independentemente do tipo de chave.

Stephen Kitt
fonte
14

Isso passaria pela matriz:

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

i é o índice

caos
fonte
9

A matriz in awknão é um objeto de primeira classe, como o dicionário Python. Em awk, o nome da matriz sem subscrito pode ser usado apenas em dois contextos :

  • Um parâmetro em uma definição de função ou chamada de função.
  • Token de nome após a palavra-chave in.

Em outro contexto, awkirá gerar um erro.

Você precisa de um forloop para iterar e imprimir o conteúdo de uma matriz:

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