【问题标题】:How does the linux utility "sort" work? (why does it not work the way I think it should?) [closed]linux 实用程序“排序”如何工作? (为什么它不像我认为的那样工作?)[关闭]
【发布时间】:2016-02-06 15:57:48
【问题描述】:

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

【问题讨论】:

标签: linux sorting


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多