使用 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 表示该行的最后一个字符。