2014-06-06 59 views
1

我需要按照图示顺序排列下面的内容。首先基于第一列,其次基于第三列。unix反向排序多列排序无法正常工作

148672074 ABC 23.77 
148672073 ABC 13.77 
148672074 ABC 53.77 
148672071 ABC 23.77 
148672074 ABC 93.77 
148672074 ABC 193.77 

我需要像,

148672071 ABC 23.77 
148672073 ABC 13.77 
148672074 ABC 193.77 
148672074 ABC 93.77 
148672074 ABC 53.77 
148672074 ABC 23.77 

我用下面的命令。

sort -t "\t" -k1,1n -k3,3rn a.txt >b.txt 

但是,我得到的输出作为

148672071 ABC 23.77 
148672073 ABC 13.77 
148672074 ABC 193.77 
148672074 ABC 23.77 
148672074 ABC 53.77 
148672074 ABC 93.77 

有人请告诉我,我要去哪里错了吗?请给我正确的命令。

PS:我正在使用的文件是一个TSV格式文件,从Excel表导出。

回答

2

\t被识别为t,而不是标签。

代替\t,按下Ctrl键+V,然后标签表示制表符。

$ sort -t " " -k1,1n -k3,3rn a.txt 
148672071 ABC 23.77 
148672073 ABC 13.77 
148672074 ABC 193.77 
148672074 ABC 93.77 
148672074 ABC 53.77 
148672074 ABC 23.77 

UPDATE

由于fedorqui评论,你也可以使用$'\t'

$ sort -t $'\t' -k1,1n -k3,3rn a.txt 
148672071 ABC 23.77 
148672073 ABC 13.77 
148672074 ABC 193.77 
148672074 ABC 93.77 
148672074 ABC 53.77 
148672074 ABC 23.77 
+1

你也可以使用'-t $'\ t''。 – fedorqui

+1

@fedorqui,谢谢你的评论。我会将其添加到答案中。 – falsetru