2017-08-31 64 views
0

我有一个tsv分隔文件,我尝试排序。 我使用sort -k1,1n,为了在第一列进行数字排序。根据第一列的数字排序

但结果我得到的是下面的,这不是我想要的东西:

061  data1 
    2305 data2 
    4080 data3 
    9251 data4 
    11844 data5 
    238 data6 
    264 data7 
    33940 data8 
    439 data9 
    5640 otherdata 
    682 help 
    1264 moredata 

预期输出:

有关使用
061  data1 
    238  data6 
    264  data7 
    439  data9 
    682  help 
    1264 moredata   
    2305 data2 
    4080 data3 
    5640 otherdata 
    9251 data4 
    11844 data5 
    33940 data8 
+0

sort -k1 -n文件名应该做你需要的吗? –

+0

请发布您的源文件 – Guru

+0

的内容,您可以使用它作为我已发布的输出的源,并说我想获得预期的输出作为结果 – fage876

回答

0

sortstdin和命令行以及读出。因此,如果你有一个文件就可以了:如果要排序根据第一列可以

sort < file 
# or 
sort file 

sort -k1 < file 

但如果事实上,它的默认操作影响,因为其输出不关心数字顺序。因此,你应该添加-n选项:

-n, --numeric-sort   compare according to string numerical value 

,做它喜欢:

sort -k1 -n < file 

它输出:

061  data1 
238 data6 
264 data7 
439 data9 
682 help 
1264 moredata 
2305 data2 
4080 data3 
5640 otherdata 
9251 data4 
11844 data5 
33940 data8 

,如果你为它提供-r它以相反的顺序打印:

33940 data8 
11844 data5 
9251 data4 
5640 otherdata 
4080 data3 
2305 data2 
1264 moredata 
682 help 
439 data9 
264 data7 
238 data6 
061  data1 
0

如何:

sort -n Input_file 

或者你需要在这些值之间有相同的空间,那么以下内容可能会对您有所帮助。

sort -n Input_file | awk '{$1=$1} 1' OFS="\t" 

OR

sort -n Input_file | column -t 
+0

我的文件已被制表符分隔,所以我认为排序-n会做。排序-n我怎么能确定,它只排序在第一列? – fage876

+0

它为什么重要?您的示例数据不会显示第一个字段对于两行相同的任何字段。为什么在这种情况下也不能接受第二个领域? – tripleee

+0

我发布的样本数据并未涵盖我可能拥有的大文件中的数据。第1栏的问题很明显。 – fage876

0

尝试使用$'\t'作为字段分隔符:

$ cat file.tsv 
    061 data1 
    2305 data2 
    4080 data3 
    9251 data4 
    11844 data5 
    238 data6 

$ sort -t $'\t' -n file.tsv 
    061 data1 
    238 data6 
    2305 data2 
    4080 data3 
    9251 data4 
    11844 data5