Jak wyświetlić całą zawartość tablicy awk?

41

W moim rozumieniu tablica awk przypomina coś w rodzaju Python Dict.

Zapisuję więc poniższy kod, aby go zbadać:

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

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

Ponieważ pierwsza kolumna nie jest liczbą, w jaki sposób mogę odczytać całkowitą zawartość tablicy lub przejść ją?

Zen
źródło

Odpowiedzi:

60

Możesz zapętlić klucze tablicy i wyodrębnić odpowiednie wartości:

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

Aby uzyskać wynik podobny do słownika Python, możesz również wydrukować klucz:

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

Działa to niezależnie od typu klucza.

Stephen Kitt
źródło
14

To zapętliłoby tablicę:

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

i jest indeksem.

chaos
źródło
8

Tablica w awknie jest obiektem pierwszej klasy, jak słownik w Python. W awknazwie tablicy bez indeksu dolnego można używać tylko w dwóch kontekstach :

  • Parametr w definicji funkcji lub wywołaniu funkcji.
  • Nazwa tokena po słowie kluczowym in.

W innym kontekście awkzgłosi błąd.

Potrzebujesz forpętli do iteracji i drukowania zawartości tablicy:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
Cuonglm
źródło