сортировка хешей / массивов в awk - PullRequest
2 голосов
/ 20 сентября 2008

Есть ли простой способ сделать что-либо из следующего в awk?

  • Сортировка массива / хэша по его данным
  • Сортировка хэша по строковому ключу

1 Ответ

3 голосов
/ 20 сентября 2008

Вот еще один ответ на очень похожую проблему: http://www.computing.net/answers/unix/urgent-help-with-sorting-in-awk/4442.html

Что должно быть примерно таким:

gawk 'BEGIN {c=1} { array[c] = sprintf ("%s %s", $2, $1); c++ } 
END { asort(array); for (x=1;x<c;x++) { print array[x] } }'

Обратите внимание, что я использовал 'gawk'. Если вы хотите встроенную сортировку, используйте gawk.

В этом примере берется «разделенный пробелами» ввод пар ключ-значение и сортируется по второму значению (конечно, он выводит их в формате значение / ключ, но вы видите, что я там делаю.)

Чтобы сделать это с массивом, существующим в gawk, вы должны использовать нечто подобное.

Если вы используете awk или mawk, вам придется использовать одну из многих функций сортировки, доступных на man-страницах, чтобы выполнить сортировку.

Из справочной страницы gawk: Все массивы в AWK являются ассоциативными, то есть индексируются строковыми значениями. Специальный оператор in может использоваться в операторе if или while, чтобы увидеть, имеет ли массив индекс, состоящий из конкретное значение. if (val в массиве) массив печати [val] Если массив имеет несколько индексов, используйте (i, j) в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...