按 int 值排序字符串数组的问题 Bash

Issue with Ordering array of strings by their int value Bash

假设我有一个字符串名称数组,例如,

_billy_2 _bobby_1 _william_3

我正在尝试按数值降序排列,

我正在使用类似的东西这样做:

sortNames=($( printf '%s\n' "${names[@]}" | sort -k3 -t'_' -r))

但是,这一直有效,直到我有一个数组,例如:

_billy_115 _bobby_3 _william_4

这将打印出:

_william_4 _bobby_3 _billy_115

而不是:

_billy_115 _william_4 _bobby_3

关于原因有什么想法吗?

使用sed将每个字符串分隔成一个新行

$ sed 's/[^ ]*/&\n/g' input_file | rev | sort -r | rev | xargs
_william_3 _billy_2 _bobby_1

$ sed 's/[^ ]*/&\n/g' - 这将匹配每个字符串的最后一位数字,return 匹配并添加一个新行

rev - 反转以便可以对数字进行排序

sort -r - 反向排序