为什么linux sort没有给我想要的结果?

时间:2009-11-26 08:53:13

标签: linux csv shell sorting

我有一个文件a.csv,内容类似于下面的

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,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

这不是第一列的实际排序。我做错了什么?

3 个答案:

答案 0 :(得分:2)

您必须将结束位置指定为1:

sort -k1,1 -t, a.csv

答案 1 :(得分: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.

答案 2 :(得分:2)

请改为尝试:

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

-k 1排序为“从第一个字段开始排序” - 从而有效地违背了首先传递参数的点。

这在sort man page中有记录,并在示例部分中发出警告:

  

在第二个字段上以数字方式排序   并通过排序解决关系   按字母顺序排列第三和第四   第五场的人物。使用`:'作为   字段分隔符:

     

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

     

请注意,如果您已写过-k 2   -k 2,2sort会使用全部   从第二个开始的人物   字段并延伸到最后   line作为主数字键。对于   大多数应用程序,   处理跨越多个的密钥   字段作为数字将不会做你   期望的。