KornShell Сортировать массив целых чисел

Есть ли в скриптах KornShell (ksh) команда для сортировки массива целых чисел? В этом конкретном случае меня интересует простота, а не эффективность. Например, если переменная $UNSORTED_ARR содержала значения "100911, 111228, 090822" и я хотел сохранить результат в $SORTED_ARR

2 ответа

Решение

Это на самом деле индексированный массив или список в строке?

Массив:

UNSORTED_ARR=(100911 111228 090822)
SORTED_ARR=($(printf "%s\n" ${UNSORTED_ARR[@]} | sort -n))

Строка:

UNSORTED_ARR="100911, 111228, 090822"
SORTED_ARR=$(IFS=, printf "%s\n" ${UNSORTED_ARR[@]} | sort -n | sed ':a;$s/\n/,/g;N;ba')

Есть несколько других способов сделать это, но принцип тот же.

Вот еще один способ для строки, использующий другую технику:

set -s -- ${UNSORTED_ARR//,}
SORTED_ARR=$@
SORTED_ARR=${SORTED_ARR// /, }

Обратите внимание, что это лексикографическая сортировка, поэтому вы могли бы видеть такие вещи, когда числа не имеют начальных нулей:

$ set -s -- 10 2 1 100 20
$ echo $@
1 10 100 2 20

Если я возьму это, то это сработает, но я не смогу пройти через него (потому что теперь это список строк) - pws5068 4 марта '11 в 21:01

Сделай это:

\# create sorted array
set **-s** -A $@ 
Другие вопросы по тегам