实用程序“排序”如何工作?(为什么它不像我认为的那样工作?)

Ste*_*mer 3 sort

我有 2 个文本文件:

$ cat /tmp/test1
"AAP" bar
"AEM" bar
"AA" bar
"AEO" bar
"A" bar

$ cat /tmp/test2
"AEM" foo
"AAP" foo
"A" foo
"AEO" foo
"AA" foo
Run Code Online (Sandbox Code Playgroud)

我想对它们进行排序

$ sort /tmp/test1
"AA" bar
"AAP" bar
"A" bar              <-- "A" is in position 3
"AEM" bar
"AEO" bar

$ sort /tmp/test2
"AA" foo
"AAP" foo
"AEM" foo
"AEO" foo
"A" foo              <-- "A" is in position 5
Run Code Online (Sandbox Code Playgroud)

为什么"A"最终在第 3 个/tmp/test1位置/tmp/test2和第 5 个位置?

我的期望是将比较每列的每个字符。

这样,比较列3时,'A','E'和'"'将彼此进行比较,并且这将是在该测试数据的最终排序顺序的最终决定因素。

显然我的期望是错误的,sort如果不是我期望的方式,那么如何工作?

是否有命令行选项sort或其他一些实用程序可以用来获取我想要的排序顺序?

kub*_*zyk 8

您需要更改排序规则区域设置。您描述的行为是典型的en_US和许多其他语言环境。修复:

LC_ALL=C   sort  /tmp/test1
Run Code Online (Sandbox Code Playgroud)

此答案中的更多内容:https : //stackoverflow.com/questions/6531674/linux-sort-unexpected-output


小智 5

可能它只看字母字符?因此,A在下一个字母字符的情况下是b来自栏。

  • 我想你是正确的。来自`man sort`:`*** WARNING *** 环境指定的语言环境会影响排序顺序。设置 LC_ALL=C 以获取使用本机字节值的传统排序顺序。` 所以可能指定了一个导致排序行为的语言环境。 (2认同)