按数字顺序对包含下划线的数字进行排序

按数字顺序对包含下划线的数字进行排序

我有如下数据,想按数字顺序对该值进行排序。这个命令不起作用。

sort -t'_' -nk3,2 c

输入数据

5_5_1_2
5_5_1_3
5_5_1_4
5_5_1_5
5_5_2
5_5_3
5_5_4
5_5_5
5_6
5_7
6_1_10
6_1_11
6_1_12
6_1_13
6_1_14
6_1_2
6_1_3
6_1_4
6_1_5
6_1_6
6_1_7
6_1_8
6_1_9
6_2_10
6_2_11
6_2_12
6_2_13
6_2_14
6_2_15
6_2_16
6_2_17
6_2_1
6_2_2
6_2_3

答案1

很难说出你想要完成什么,但我假设你需要:

5_5_1_2
5_5_1_3
5_5_1_4
5_5_1_5
5_5_2
5_5_3
5_5_4
5_5_5
5_6
5_7
6_1_2
6_1_3
6_1_4
6_1_5
6_1_6
6_1_7
6_1_8
6_1_9
6_1_10
6_1_11
6_1_12
6_1_13
6_1_14
6_2_1
6_2_2
6_2_3
6_2_10
6_2_11
6_2_12
6_2_13
6_2_14
6_2_15
6_2_16
6_2_17

作为输出。

这可以通过将数字视为“版本”来获得,并且“版本排序”可通过开关使用-V,如下所示:

sort -V <file>

此行为在中进行了解释sort手册页

答案2

-kx,y方法:使用从第 x个字段的开头到第 y字段的末尾结束的行部分作为排序键

所以-k3,2在这种情况下没有意义。如果你的意思是:对第三个字段进行数字排序,然后对第二个字段进行数字排序,那就是:

sort -nt_ -k3,3 -k2,2

或者:

sort -t_ -k3,3n -k2,2n

(这里将n数字标志应用于每个关键规范,而不是使用该-n选项全局进行数字排序)。

相关内容