为什么uniq可以忽略前导字符但不能忽略结尾字符?

为什么uniq可以忽略前导字符但不能忽略结尾字符?

POSIX 指定的命令行工具uniq旨在“报告或过滤掉文件中的重复行”。除了涉及全行比较的用例之外,还有两种用于部分行比较的选项:

  • -f <number>忽略第一个<number>字段,并且
  • -s <number>忽略第一个<number>字符(从 中的任何被忽略的字段之后开始-f)。

我不明白的是为什么从未添加该功能uniq以允许忽略除第一个之外的所有 <number>字段。

一个常见的 Awk 习惯用法是:

awk '!a[$1]++'

它只打印包含以下内容的行首次出现他们的第一个领域的出现。

在我看来,这与 的功能非常相似uniq

当然,工具重叠是可以的,但是是否有任何基于历史或 UNIX 哲学的原因不包括-f、 的并行功能?仅有的考虑前____个字段?

答案1

我不知道历史或基于 UNIX 哲学的原因(如果有的话),但几年前有人在coreutils错误列表上提交了一个功能请求(和补丁),以将该功能添加到uniq.最终被拒绝:

rev | uniq -f | rev被认为足够

相关内容