如何按数值订购以下清单?

时间:2016-08-31 19:08:38

标签: bash

您好我有以下列表:

D10
D7
D8
D9
SUB1
SUB11
SUB12
SUB13
SUB15
SUB16
SUB17
SUB18
SUB19
SUB2
SUB20
SUB21
SUB22
SUB23
SUB24
SUB25
SUB26
SUB27
SUB28
SUB3
SUB31
SUB34
SUB35
SUB42
SUB43
SUB5
SUB6

我想通过数值来命令我的意思是只使用我尝试过的字符串末尾的数字:

sort -n < list_ORDER

但我得到了:

D10
D7
D8
D9
SUB1
SUB11
SUB12
SUB13
SUB15
SUB16
SUB17
SUB18
SUB19
SUB2
SUB20
SUB21
SUB22
SUB23
SUB24
SUB25
SUB26
SUB27
SUB28
SUB3
SUB31
SUB34
SUB35
SUB42
SUB43
SUB5
SUB6

我想感谢任何建议,非常感谢支持

2 个答案:

答案 0 :(得分:3)

sed获取帮助,将数字中的非数字字符sort - 基于数字字段分隔开,然后将它们连接起来:

sed -E 's/^([^[:digit:]]*)([[:digit:]]*)$/\1 \2/' file.txt | sort -k2,2n | sed 's/ //'

示例:

$ sed -E 's/^([^[:digit:]]*)([[:digit:]]*)$/\1 \2/' file.txt | sort -k2,2n | sed 's/ //'
SUB1
SUB2
SUB3
SUB5
SUB6
D7
D8
D9
D10
SUB11
SUB12
SUB13
SUB15
SUB16
SUB17
SUB18
SUB19
SUB20
SUB21
SUB22
SUB23
SUB24
SUB25
SUB26
SUB27
SUB28
SUB31
SUB34
SUB35
SUB42
SUB43

答案 1 :(得分:1)

您需要将字母与数字分开然后排序:

sed -e 's/\([^0-9]\)\([0-9]\{1,\}\)/\1 \2/' | sort -k2 -n | sed -e 's/ //'