Come visualizzare tutto il contenuto in un array awk?


41

A mio avviso, awk array è qualcosa di simile a Python Dict.

Quindi scrivo il codice qui sotto per esplorarlo:

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

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

Dato che la prima colonna non è un numero, come potrei leggere il contenuto totale dell'array o attraversarlo?

Risposte:


60

È possibile eseguire il ciclo sopra le chiavi dell'array ed estrarre i valori corrispondenti:

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

Per ottenere un output simile a quello che otterresti con un dizionario Python, puoi anche stampare la chiave:

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

Funziona indipendentemente dal tipo di chiave.


14

Questo farebbe un ciclo attraverso l'array:

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

i è l'indice.


9

La matrice in awknon è un oggetto di prima classe come il dizionario in Python. In awk, il nome dell'array senza pedice può essere utilizzato solo in due contesti :

  • Un parametro in una definizione di funzione o chiamata di funzione.
  • Token nome dopo la parola chiave in.

In un altro contesto, awkgenererà un errore.

È necessario un forciclo per iterare e stampare il contenuto di un array:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.