2009-11-26 57 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

相关问题