排序错误或误解

排序错误或误解

假设我有这个文件

b 10 foo
a 10 bar
a 2 bar

我想按第三列按字母顺序排序。如果出现相同结果,我想按第二列按数字顺序排序。在 unix 排序程序的手册页中,您可以找到以下内容:

> sort -k3 -k2n a

这使

a 2 bar
a 10 bar
b 10 foo

哪个是对的。

现在,我真正想要的是按第一列按字母顺序排序,如果出现平局,则按第二列按数字排序。有人能向我解释一下为什么

> sort -k1 -k2n a

给予

a 10 bar
a 2 bar
b 10 foo

哪一个是明显错误的?

答案1

你的例子没有按预期发挥作用的原因是sort考虑了所有的位置指定的那个。在您的示例中,字典按 排序,-k1将字符串排序a 10 bar在 之前a 2 bar,因此您不需要决胜局。

您需要明确指定排序键的限制,如手册页中所述:

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

例子:

$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo

相关内容