实用程序“排序”如何工作? (为什么它不能按照我认为应该的方式工作?)

实用程序“排序”如何工作? (为什么它不能按照我认为应该的方式工作?)

我有 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

我想对它们进行排序

$ 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

为什么"A"最终会出现在位置 3 中/tmp/test1并在位置 5 英寸/tmp/test2

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

因此,当比较第 3 列时,'A''E''"'将相互比较,这将是该测试数据的最终排序顺序的最终决定因素。

显然我的期望是错误的,那么sort如果没有按照我期望的方式工作,那么它是如何工作的呢?

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

答案1

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

LC_ALL=C   sort  /tmp/test1

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

答案2

也许它只看字母字符?因此,下A一个字母字符是bfrom bar。

相关内容