linux实用程序"排序"工作? (为什么它不像我认为的那样工作?)

时间:2015-11-05 17:24:09

标签: linux sorting

我有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的命令行选项或我可以用来获取我想要的排序顺序的其他实用程序?

1 个答案:

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