2009-11-26 93 views
0

我有內容類似下面爲什麼linux排序不會給我想要的結果?

a,b,c 
a ,aa, a 
a b, c, f 
a , b, c 
a b a b a,a,a 
a,a,a 
a aa ,a , t 

我試圖用sort -k1 -t, a.csv 對它進行排序文件a.csv但它給下面的結果

a,a,a 
a ,aa, a 
a aa ,a , t 
a b a b a,a,a 
a , b, c 
a,b,c 
a b, c, f 

這是不實際的排序在第一列。我究竟做錯了什麼?

回答

2

您必須指定結束位置爲1,太:

sort -k1,1 -t, a.csv 
+0

哦。 k1,1似乎是要排序的列數。但是如果文字更加糟糕的話,這會起作用嗎? – DKSRathore 2009-11-26 09:01:28

2

這給一試:sort -t, -k1,1 a.csv

的人認爲,省去年底領域,它將排序的所有字符開始在現場n直到該行的末尾:

-k POS1[,POS2]' 
    The recommended, POSIX, option for specifying a sort field. The 
    field consists of the part of the line between POS1 and POS2 (or 
    the end of the line, if POS2 is omitted), _inclusive_. Fields and 
    character positions are numbered starting with 1. So to sort on 
    the second field, you'd use `-k 2,2' See below for more examples. 
+0

對於相同的答案+1 :) – 2009-11-26 09:00:31

2

試試這個:

sort -k 1,1 -t , a.csv 

排序爲-k 1「排序從第一個字段開始」 - 因此有效地無視了首先傳遞參數的觀點。

這在sort man page是記錄和警告在實施例部分:

排序數值在第二場 並解決由場5的第三和第四 字符排序 按字母順序的關係。如果你寫了-k 2-k 2,2代替 ,sort會用所有 字符開始在第二 領域,延伸到最終

$ sort -t : -k 2,2n -k 5.3,5.4

注:使用':」作爲 字段分隔符的 行作爲主要的數字的關鍵。對於 ,大多數應用程序, 將字段作爲數字跨越多個 字段將不會做你想要的。

+0

-k 2,2n中的n是什麼? – DKSRathore 2009-11-26 09:03:31

+0

這是用於此示例的-n開關。 – badp 2009-11-26 09:04:56

相關問題