Как просмотреть весь контент в массиве awk?

41

В моем понимании, массив awk - это что-то вроде python dict.

Поэтому я пишу код ниже, чтобы изучить его:

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

И я получил: awk: can't read value of my_dict; it's an array name.

Поскольку первый столбец не является числом, как я могу прочитать общее содержимое массива или пройти его?

Zen
источник

Ответы:

60

Вы можете перебрать ключи массива и извлечь соответствующие значения:

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

Чтобы получить вывод, аналогичный тому, который вы получили бы в словаре Python, вы можете также напечатать ключ:

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

Это работает независимо от типа ключа.

Стивен Китт
источник
14

Это будет цикл через массив:

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

i это индекс.

хаос
источник
9

Массив в awkне является объектом первого класса, как словарь в Python. В awk, имя массива без индекса можно использовать только в двух контекстах :

  • Параметр в определении функции или вызове функции.
  • Имя токен после ключевого слова in.

В другом контексте awkвозникнет ошибка.

Вам нужен forцикл для итерации и печати содержимого массива:

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2
cuonglm
источник