“sort -c -k1”也比较第二个字段?

时间:2013-07-07 19:28:54

标签: sorting

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

> 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

虽然我非常确定空格是默认的分隔符。

1 个答案:

答案 0 :(得分:5)

以下按预期方式工作:

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

排序调用存在两个问题:

  • -k的参数是一个指定开始和结束位置的关键定义。如果省略结束位置,则默认为行的最后一个字段,而不是起始字段。 -k1,1指定两者,告诉sort不要在比较中包含第二个字段。

  • sort默认情况下不稳定,这意味着它不保证不会干扰比较相等的行的顺序。引用文档:

  

最后,作为所有键比较相等的最后手段,sort进行比较   除了--reverse-r)之外没有任何排序选项的整行   被指定了。 --stable-s)选项会禁用此功能   “最后的比较”,以便所有字段比较的行   等于保留原来的相对顺序。