2015-11-05 79 views
3

我有2个文本文件:linux实用工具“sort”如何工作? (为什么它不工作,我认为它应该的方式?)

$ 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或我可以用来获得我想要的排序顺序?

+2

http://unix.stackexchange.com/ – Celeo

+1

我投票结束这个问题作为题外话,因为它属于unix.stackexchange.com – andrewtweber

+0

相关:http://stackoverflow.com/questions/25835561/如何灿的Perl和UNIX的排序顺序支持unicode字符串,在最相同的序列 – ninjalj

回答

5

默认情况下sort将工作在整条线上,并以特定于语言环境的方式执行此操作,某些语言环境会忽略某些字符(您的情况中的引号和空格)。要弄清楚发生了什么,请尝试--debug选项。 I.E.比较和对比:

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输出。

相关问题