Bash - 按元素的子串排序

Zoc*_*ocr 2 sorting bash

我想按 reverse 中元素的第二个和第三个字符对列表中的元素进行排序,即首先按第 3 个字符排序,然后按第 2 个字符排序。

例如。如果有这样的数组

array=(XA11000 XB21000 XA31000 XB12000)

所需的排序输出为 (XA31000 XB21000 XB12000 XA11000)

它相对简单,没有每个元素末尾的 4 位数字,如

echo "${array[@]}"|rev | sort -r | rev

会工作。

但是,我不太确定这将如何处理最后的数字。有什么建议?

cho*_*oba 6

sort-k可以指定如何排序的选项:

(   IFS=$'\n'
    echo "${array[*]}" | sort -k1.3,1.3r -k1.2,1.2r
)
Run Code Online (Sandbox Code Playgroud)

即按从第一个单词第三个字符 ( -k1.3) 到第一个单词第三个字符 ( ,1.3)的子串r排序,按第一个单词第二个字符进行二次排序。