为什么linux sort没有给我想要的结果?
题
我有一个文件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
这不是第一列的实际排序。我做错了什么?
解决方案
您必须将结束位置指定为1:
sort -k1,1 -t, a.csv
其他提示
尝试一下: 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.
请改为尝试:
sort -k 1,1 -t , a.csv
将 -k 1
排序为“从第一个字段开始排序”。 - 因此,首先有效地违背了通过论证的观点。
排序手册页中对此进行了记录,并在示例部分中发出警告:
在第二个字段上以数字方式排序 并通过排序解决关系 按字母顺序排列第三和第四 第五场的人物。使用`:'作为 字段分隔符:
$ sort -t:-k 2,2n -k 5.3,5.4
请注意,如果您已编写
-k 2
-k 2,2
,sort
将使用all 从第二个开始的人物 字段并延伸到最后 line作为主数字键。对于 大多数应用程序, 处理跨越多个的密钥 字段作为数字将不会做你 期望的。
不隶属于 StackOverflow