“排序”正确报告这两行乱序:
> 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/