“排序”正确报告这两行乱序:

> echo "a b\na a" | sort -c
sort: -:2: disorder: a a

我如何告诉排序只比较每行的第一个字段?我试过了:
> echo "a b\na a" | sort -c -k1
sort: -:2: disorder: a a

但它失败了,如上所述。

我可以只对每行的第一个字段进行排序比较,还是必须
在比较它们之前使用类似 sed 的东西来修剪线条?

编辑:我正在使用“排序(GNU coreutils)7.2”。我尝试使用不同的字段分隔符,但没有帮助:
> echo "a b\na a" | sort -k1 -c -t" "
sort: -:2: disorder: a a

虽然我很确定 space 是默认的分隔符。

最佳答案

以下按预期工作:

echo "a b\na a" | sort -s -c -k1,1

您的排序调用有两个问题:
  • -k 的参数是指定开始和结束位置的键定义。如果省略结束位置,则默认为行的最后一个字段,而不是开始字段。 -k1,1 指定两者,告诉 sort 不要在比较中包含第二个字段。
  • sort 默认是不稳定的,这意味着它不能保证不扰乱比较相等的行的顺序。引用文档:

  • 关于sorting - "sort -c -k1"也比较第二个字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17515509/

    10-14 18:18