【问题标题】:KornShell Sort Array of IntegersKornShell 排序整数数组
【发布时间】:2011-07-09 01:40:51
【问题描述】:

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

【问题讨论】:

标签: shell sorting unix scripting ksh


【解决方案1】:

它实际上是索引数组还是字符串中的列表?

数组:

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

【讨论】:

  • 这是一个索引字符串数组。所以我相信第一个例子。唯一的问题是我在(第一个版本)SORTED_ARR 分配中得到了一个“Unexpected (”。如果我把它拿出来,那么它可以工作,但我不能循环遍历它(因为它现在是一个字符串列表)
  • 知道了!被骗:set -A SORTED_ARR $(printf "%s\n" ${UNSORTED_ARR[@]} | sort -n)
【解决方案2】:

如果我把它拿出来,那么它可以工作,但我不能循环遍历它(因为它现在是一个字符串列表)– pws5068 2011 年 3 月 4 日 21:01

这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多