我想对一组数字进行排序并放入另一个数组中。以下代码是我找到的
IFS=$'\n' sorted=($(sort <<<"${array[*]}"))
unset IFS
echo "${sorted[*]}"
然而,这是通过字符串
来实现的1 12 5 111 200 1000 10
1 10 1000 111 12 200 5
如何按号码排序?
答案 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