如何在 bash 中对字母和数字组合的数组进行排序?

如何在 bash 中对字母和数字组合的数组进行排序?

我有一个数组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将空格转换为换行符

相关内容