linux排序顺序,我不明白

时间:2015-03-05 09:53:25

标签: linux sorting

我注意到以下排序输出。谁明白为什么'。'在第一次和第二次结束时排在前面?

我试图调试一个查找大型排序文件中的行的程序,但罪魁祸首似乎是我对linux排序的期望/理解。

$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/E
/mnt/x/.
<ctrl-D>
/mnt/x/.
________
/mnt/x/E
________
$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/Ed
/mnt/x/.T
<ctrl-D>
/mnt/x/Ed
_________
/mnt/x/.T
_________
$

1 个答案:

答案 0 :(得分:3)

不是那个“。”在其他角色之前或之后出现 - 它根本就没有被检查过;它纯粹基于字母字符进行排序。

在您的第一个示例中,<end-of-string>E之前排序;在第二个示例中,ET之前排序。

此行为取决于排序规则的区域设置。您可以使用环境变量对此进行影响,例如LC_COLLATE

$ env LC_COLLATE=C sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/.T
/mnt/x/Ed
$ env LC_COLLATE=en_US.UTF-8 sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/Ed
/mnt/x/.T
$

C区域设置下,将考虑所有ASCII字符,并按ASCII顺序排序;在许多其他语言环境中,标点符号被忽略 - 这可能是导致您看到的行为的原因。

您可以使用locale命令检查语言环境设置。