2008-09-20 5 views
2

Есть ли простой способ сделать любую из следующих вещей в awk?сортировка хэшей/массивов в awk

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

Вот пример родного AWK сортировки: http://en.literateprograms.org/Quicksort_(AWK) К сожалению, этот сайт, кажется, не имеют каких-либо уведомлений или я бы получил это рано. Надеюсь, вы это видите. – Chris

+0

http://www.netlib.org/research/awkbookcode/ch7 Это ссылка на сортировку вставки в awk (и многое другое). – Chris

ответ

3

Вот кто-то ответ на очень похожей проблемой: 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.

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

Чтобы сделать это до массива, оставшегося в gawk, вы использовали бы что-то подобное.

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

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

+0

Это заняло у меня немного, я уже делал что-то подобное раньше, но это было давно. Веселые части будут разделять входное выражение на регулярное выражение, а затем сортировать его. – Chris

+0

спасибо. К сожалению, я использую nawk, у которого нет асорта. – lamcro

Смежные вопросы