KornShell排序整数数组

时间:2011-03-04 19:23:08

标签: shell sorting unix scripting ksh

KornShell(ksh)脚本中是否有命令对整数数组进行排序?在这种特殊情况下,我对简单性超过效率感兴趣。例如,如果变量$ UNSORTED_ARR包含值“100911,111228,090822”,并且我想将结果存储在$ SORTED_ARR

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  

如果我接受它然后它可以工作但我无法循环它(因为它现在是一个字符串列表) - pws5068 2011年3月4日21:01

这样做:

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