不一致的排序行为

时间:2010-07-18 00:00:36

标签: unix text sorting ascii gnu

我有一个示例文件,每个文件中包含“aA0_-”字符。使用GNU排序对其进行排序可得到以下排序顺序:

$ cat /tmp/sample | sort

_
-
0
a
A

在追加其他字符后,我们获得了不同的顺序(非字母数字字符似乎具有较低的优先级):

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x

当我们将这个字符插入到开头时,我们获得原始的排序顺序:

$ cat /tmp/sample | sed 's/^/x/' | sort
x 
x_
x-
x0
xa
xA

..这种行为的解释是什么?

更新

当样本中包含“z”和“Z”字符时,结果似乎有点陌生:

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x
zx
Zx

..但是根据正确的答案,是这样的,因为所有“”,“_”和“-”都是当前区域设置中的空格(en_US .UTF-8)并且在排序时不会被忽略。

1 个答案:

答案 0 :(得分:4)

您的语言环境文件应包含LC_COLLATE的定义。 这决定了字符的排序顺序。 还要检查LC_CTYPE的定义,以及哪些字符被分类为“空格”。

如果' - '和'_'被归类为空格,您可能会找到您显示的结果。