排序命令的细微差别

时间:2013-12-13 20:23:37

标签: sorting

我需要使用字母数字id对数据进行排序。使用sort -n -k1,1进行排序,并且该命令的变体不提供按数字顺序排序的结果。有任何想法吗?需要对第一列进行排序。

数据

w51591  w53646  0.87389
w1874   w1878   -0.80693
w40054  w40193  -0.89137
w51571  w56635  -0.43085
w1728   w53651  0.9258
w10567  w40186  -0.9174
w10569  w40038  -0.916

排序-n -k1,1

的当前输出
w10567  w40186  -0.9174
w10569  w40038  -0.916
w1728   w53651  0.9258
w1874   w1878   -0.80693
w40054  w40193  -0.89137
w51571  w56635  -0.43085
w51591  w53646  0.87389

另外,有没有办法对第一列进行排序,然后按第二列进行排序,如果我在第一列中重复了id?

谢谢,祝节日快乐。

2 个答案:

答案 0 :(得分:2)

您可以将排序字段的起始字符指定为2以跳过w

sort -n -k1.2,1 

按第一个字段排序,然后按第二个

排序
sort  -k1.2,1n -k2.2,2n

答案 1 :(得分:1)

要正确排序第一列:

sort -k 2 -n -t 'w' input.txt

这会将字段分隔符更改为“w”,这是一种从输入中删除该主要字符的黑客行为。您在第一列中排序的数字将变为字段2(因此-k 2)。

我不知道用sort来完成问题的第二部分(在第二列上排序)的方法,我想你可能需要一个更复杂的解决方案,就像一个简短的Perl脚本。

编辑:请参阅下面1_CR的答案,了解对两列进行排序的方法。