假设我有这个文件
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