sort -u(唯一)适用于多键,但不适用于单个键

sort -u(唯一)适用于多键,但不适用于单个键

使用 GNU 排序。我想根据重复的键仅打印一组行中的第一行。

-k1,2按预期工作 – 仅输出第一个排序行

printf %s\\n 'a a c' 'a a b' 'a a a' | sort -u -k1,2 -t' '
# a a a

-k1不是按预期工作 – 所有 3 个排序行均输出

printf %s\\n 'a a c' 'a a b' 'a a a' | sort -u -k1 -t' '
# a a a
# a a b
# a a c

这对于 的所有变体来说是正常的sort,还是只是 GNU 类型?看起来比较容易出现“意想不到的结果”,如图man sort所示,第二个关键数字为选修的:-k, --key=POS1[,POS2]

-k1,1确实适用于-u,而普通排序(即 no -u)仅适用于-k1

答案1

我认为这是 POSIX 默认行为,如手册页:

-k 字段开始[类型][,字段结束[类型]]

应定义一个从 field_start 开始到 field_end 结束的关键字段,除非 field_start 超出行尾或在 field_end 之后,在这种情况下关键字段为空。缺少的 field_end 表示该行的最后一个字符。

相关内容