我有一个数组h4 h5 h1 h2 h3
,我想根据数字对其进行排序,但不知道如何排序。做这个的最好方式是什么?
edit1:我还想通过包含不同字母的数字对数组进行排序,例如s4 h5 q1 h2 g3
。
答案1
无需使用tr
; shell 的“参数扩展”具有足够的IFS
(在子 shell 中)应该就足够了。尝试
$ ARR=(h4 h5 h1 h2 h3)
$ SA=( $(IFS=$'\n'; echo "${ARR[*]}" | sort) )
$ BRR=(s4 h5 q1 h2 g3)
$ SB=( $(IFS=$'\n'; echo "${BRR[*]}" | sort -k1.2) )
$ echo "${SB[*]}"
q1 h2 g3 s4 h5
答案2
尝试这个,
只需打印、排序并将值存储在同一数组名称中即可。
ary=(h4 h5 h1 h2 h3)
ary=(`printf '%s\n' "${ary[@]}"|sort`)
echo ${ary[@]}
h1 h2 h3 h4 h5
答案3
让我们将数组A
视为
A=(h4 h5 h1 h2 h3)
现在,该命令的问题sort
是它对不同行中的元素进行排序,而无法对同一行中的元素进行排序。因此,解决方法是将数组转换为每行一个元素并排序sort
并将它们放入实际已排序的数组中,即
B=(`echo ${A[@]} | tr " " "\n" | sort`)
现在,B 是排序后的数组。在这里,tr
将空格转换为换行符