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ą?

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.


14

To zapętliłoby tablicę:

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

i jest indeksem.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.