unix - 排序行为不一致

标签 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) 中的空格,并且在排序时不会被忽略。

最佳答案

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

如果“-”和“_”被分类为空格,您可能会找到已显示的结果。

关于unix - 排序行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273742/

相关文章:

bash - 如何在 shell 管道中使用不同的文件描述符?

PHP exec() 无法正常工作

php - 文本文件有大小限制吗?

javascript - knockout 绑定(bind)错误

python - 插入排序算法python有问题

arrays - 如何找到多个数组项的所有组合

c++ - 在 Linux 上监视目录的程序

linux - 如何使用sed删除带通配符的字符串

linux - 文件中的 Python 匹配行

sorting - SlickGrid RemoteModel 与 Dataview 模型