Вы можете контролировать порядок массив обхода так:
function cmp_len(i1, v1, i2, v2) {
return length(v1) - length(v2)
}
BEGIN {
b[1] = "alnis"
b[2] = "nis"
b[3] = "connis"
PROCINFO["sorted_in"] = "cmp_len"
for (i in b) {
print b[i]
}
}
Я создал свою собственную функцию сравнения и присвоил имя PROCINFO["sorted_in"]
, чтобы изменить порядок, в котором элементы пересекаются.
Тестирование это:
$ awk -f script.awk
nis
alnis
connis
Вы можете также передать имя этой функции asort
в качестве третьего аргумента для того, чтобы записать отсортированные значения в новый массив:
asort(b, sorted, "cmp_len")
Обратите внимание, что это изменяет индексы элементов массива, но не порядок, в котором они пройдут с помощью цикла for (i in sorted)
. Чтобы просмотреть результаты в новом порядке, вам нужно использовать цикл «C-style» или изменить PROCINFO["sorted_in"]
, как указано выше.