GNU sort命令不是用公共前缀正确地对不同长度的单词进行排序,而是仅当使用字段分隔符对多个字段中的一个进行排序时。
以下是不使用字段分隔符的正确、预期的排序行为:
$cat/tmp/test0bc(c)蚂蚁一bcd公司公元前中国$排序/tmp/test0一蚂蚁b公元前bcd公司c(c)中国
请注意,对于所有具有公共字符串前缀的单词,较短的单词优先于较长的单词排序。例如。一
在之前蚂蚁
,b
在之前公元前
在之前立方厘米
这是公认的标准英语字符串排序方式,例如在字典中。
然而,当您尝试对表格数据(例如CSV文件)进行排序,并对其中一列进行排序时,这种排序行为会发生变化。下面是它的样子:
$cat/tmp/test1b、 foo公司c、 巴蚂蚁,巴兹a、 foo公司立方厘米,立方厘米bc、pe中国,中国$sort/tmp/test1-t,-k1a、 foo公司蚂蚁,巴兹bcd、tybc、peb、 foo公司c、 巴中国,中国
请注意,带有公共前缀的单词一
和c(c)
仍在正确处理,但具有公共前缀的字符串b
不是;bcd公司
在之前排序公元前
在之前排序b
,所有这些都不正确!这种行为是稳定的;你总是得到同样的结果。我在一个更大的CSV文件上遇到了同样的问题,如果有意义的话,那里的排序错误肯定是随机的。
我试过各种旗帜分类
没有人能纠正这种行为。-d日
和-秒
不行。这是GNU coreutils 9.4排序中的值。
那么,这只是一个错误吗分类
命令?我是不是用错了?我能做的更好的事情是通过字典按第一列中的单词对CVS进行排序吗?