Linux实用工具“sort”是如何工作的?(为什么它不能按照我想象中的方式工作?)

3

I have 2 text files:

$ 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"/tmp/test1第3个位置和在/tmp/test2第5个位置
我的期望是每列每个字符进行比较。
因此,当比较第3列时,'A''E''"'将相互比较,这将是确定该测试数据最终排序顺序的最终因素。
显然,我的期望是错误的,那么如果不是我期望的方式,sort如何工作?
是否有命令行选项或其他实用程序可以使用以获得所需的排序顺序?

2
http://unix.stackexchange.com/ - Celeo
1
我投票关闭此问题,因为它属于unix.stackexchange.com。 - andrewtweber
相关:https://dev59.com/LV8e5IYBdhLWcg3wVJXH - ninjalj
1个回答

5

默认情况下,sort会在整行上以本地特定的方式工作,一些语言环境会忽略某些字符(例如你的引号和空格)。如果想弄清楚发生了什么,请尝试使用--debug选项。例如,进行比较和对比:

sort --debug /tmp/test[12]
LC_ALL=C sort --debug /tmp/test[12]
sort --debug -k1,1 /tmp/test[12]
LC_ALL=C sort --debug -k1,1 /tmp/test[12]

顺便提一下,你可以加上 -s 选项,避免使用最后的备选方案来简化 --debug 输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接