我有一个文件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
这不是第一列的实际排序。我做错了什么?
答案 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,2
,sort
会使用全部 从第二个开始的人物 字段并延伸到最后 line作为主数字键。对于 大多数应用程序, 处理跨越多个的密钥 字段作为数字将不会做你 期望的。