我有一个示例文件,每个文件上都包含“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) 中的空格,并且在排序时不会被忽略。
最佳答案
您的语言环境文件应包含 LC_COLLATE 的定义。 这决定了字符的排序顺序。 另请检查 LC_CTYPE 的定义,以及哪些字符被归类为“空格”。
如果“-”和“_”被分类为空格,您可能会找到已显示的结果。
关于unix - 排序行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273742/