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 $@