按 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
- 反向排序
假设我有一个字符串名称数组,例如,
_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
- 反向排序