我有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"
最终位于/tmp/test1
的位置3和/tmp/test2
的位置5?
我的期望是每列的每个字符将进行比较。
因此,在比较第3列时,'A'
,'E'
和'"'
将相互比较,这将是此测试的最终排序顺序中的最终决定因素数据
显然我的期望是错误的,那么sort
如果没有按照我预期的方式工作呢?
是否有sort
的命令行选项或我可以用来获取我想要的排序顺序的其他实用程序?
答案 0 :(得分: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输出。