Como visualizar todo o conteúdo em um array awk?

29

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

Então eu 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?

    
por Zen 06.02.2015 / 11:28

3 respostas

44

Você pode percorrer 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 um resultado semelhante ao obtido com um dicionário do 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.

    
por 06.02.2015 / 11:34
10

Isso passaria pelo array:

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

i é o índice.

    
por 06.02.2015 / 11:35
6

A matriz em awk não é um objeto de primeira classe como o dicionário em Python . Em awk , o nome da matriz sem índice só pode ser usado 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, awk gerará um erro.

Você precisa de um loop for 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
    
por 06.02.2015 / 11:40

Tags