KornShell Сортировать массив целых чисел - PullRequest
1 голос
/ 04 марта 2011

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

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

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

Массив:

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
0 голосов
/ 23 июля 2012

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

Сделайте это:

\# create sorted array
set **-s** -A $@ 
...