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?

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.


14

Isso passaria pela matriz:

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

i é o índice


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.