2017-08-31 79 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