2013-12-13 33 views
1

我需要使用字母数字标识排序数据。使用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在第一列?

感谢和节日快乐。

+0

是“排序-n -K1 ,1“一个bash命令? – hrv

+0

是的,我相信如此 –

回答

1

进行排序正确的第一列:

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

这将改变字段分隔符“W”这是怎样的一个黑客脱光,从你输入的主角。您在第一列中排序的数字会变成字段2(因此为-k 2)。

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

编辑:请参阅下面的1_CR的答案,以便在两列上进行排序。

+0

那么工作完美,谢谢!无论出于何种原因,第二列在我的大文件中似乎也按顺序排序。 ¯\ _(ツ)_ /¯ –

2

,你可以指定排序字段起始字符作为2跳过w

sort -n -k1.2,1 

由第一场进行排序,然后第二

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