2011-03-04 47 views
1

KornShell(ksh)腳本中是否有命令對整數數組進行排序?在這種特定情況下,我對簡單性而非效率感興趣。例如,如果變量$ UNSORTED_ARR包含值「100911,111228,090822」,並且我想將結果存儲在$ SORTED_ARR中KornShell整數排序

+0

。由於目前的答案不適合我。 http://stackoverflow.com/questions/27900170/how-to-sort-integer-array-in-ksh-unix-shell-scripting – Sachin 2015-01-12 13:39:47

回答

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//,} 
[email protected] 
SORTED_ARR=${SORTED_ARR// /, } 

注意,這是一個字典排序,所以你會看到這樣的事情時,數字不具有前導零:

$ set -s -- 10 2 1 100 20 
$ echo [email protected] 
1 10 100 2 20 
+0

這是一個索引數組的字符串..所以我相信第一個例子。唯一的問題是,我得到一個「Unexpected(」(第一版)SORTED_ARR賦值。如果我把它拿出來然後它可以工作,但我無法循環它(因爲它現在是一個字符串列表) – pws5068 2011-03-04 21:01:55

+0

明白了!作弊: set -A SORTED_ARR $(printf「%s \ n」$ {UNSORTED_ARR [@]} | sort -n) – pws5068 2011-03-04 21:04:39

0

如果我參加了這一點,然後它工作,但我不能循環遍歷它(因爲它現在是一個字符串列表) - pws5068 03月04日在'11 21:01

這樣做:

最新的答案相同
\# create sorted array 
set **-s** -A [email protected]