“排序”正确报告这两行无序:
> 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这样的东西修剪线条?
编辑:我正在使用“sort(GNU coreutils)7.2”。我尝试使用不同的字段分隔符,但它没有帮助:> echo "a b\na a" | sort -k1 -c -t" "
sort: -:2: disorder: a a
虽然我非常确定空格是默认的分隔符。
答案 0 :(得分:5)
以下按预期方式工作:
echo "a b\na a" | sort -s -c -k1,1
排序调用存在两个问题:
-k
的参数是一个指定开始和结束位置的关键定义。如果省略结束位置,则默认为行的最后一个字段,而不是起始字段。 -k1,1
指定两者,告诉sort
不要在比较中包含第二个字段。
sort
默认情况下不稳定,这意味着它不保证不会干扰比较相等的行的顺序。引用文档:
最后,作为所有键比较相等的最后手段,
sort
进行比较 除了--reverse
(-r
)之外没有任何排序选项的整行 被指定了。--stable
(-s
)选项会禁用此功能 “最后的比较”,以便所有字段比较的行 等于保留原来的相对顺序。