按数字排序数组并在bash中放入另一个数组

时间:2018-02-13 15:39:36

标签: arrays bash sorting numbers

我想对一组数字进行排序并放入另一个数组中。以下代码是我找到的

IFS=$'\n' sorted=($(sort <<<"${array[*]}"))
unset IFS
echo "${sorted[*]}"

然而,这是通过字符串

来实现的
1 12 5 111 200 1000 10
1 10 1000 111 12 200 5

如何按号码排序?

2 个答案:

答案 0 :(得分:2)

此代码使用\0作为分隔符,因此甚至适用于排序非数值数组:

arr=(4 2 3 1 5)
sorted=()

while IFS= read -r -d '' item; do
    sorted+=("$item")
done < <(printf '%s\0' "${arr[@]}" | sort -zn)

bash 4.4中,您还可以使用readarray

readarray -d '' sorted < <(printf '%s\0' "${arr[@]}" | sort -zn)

答案 1 :(得分:1)

不修改IFS

$ p=(1 10 1000 111 12 200 5)
$ sorted_p=($(tr ' ' '\n' <<<"${p[@]}" | sort -n))
$ echo "${sorted_p[@]}"
1 5 10 12 111 200 1000