【问题标题】:remove first line if there is a duplicate如果有重复则删除第一行
【发布时间】:2013-08-09 00:08:45
【问题描述】:

我知道如何使用 sortuniq 删除重复的行,但是有没有办法删除重复的第一行而不是第二行?

例如,如果我有一个包含以下行的文件:

aaaaaaa
bbbbbbb
bbbbbbb
ccccccc
aaaaaaa
ccccccc

输出需要是:

bbbbbbb
aaaaaaa
ccccccc

我需要运行某种循环,还是可以使用uniq 轻松完成? 而且,是的,我知道向后排序会给我输出,但这不是我想要的。

谢谢。

【问题讨论】:

  • 我可能需要澄清一下。如果重复,代码应保留最新行。
  • 如果它是重复的(并且您正在对事物进行排序),您删除哪些重复有什么区别?
  • 我不想对其进行排序。输出需要按原始顺序。 sort $1 | uniq -d 最终给了我 aaaaaa bbbbbb cccccc 或 cccccc bbbbbb aaaaaaa 这两个都不是我需要的输出

标签: unix sorting duplicates uniq


【解决方案1】:

使用 paste (1,2,3...) 在每行的开头添加一个顺序字段,然后根据该字段反转列表,然后运行 ​​uniq 忽略该字段。然后按该字段排序以确保它们保持正确的顺序。然后使用 cut 或 colrm 删除该字段。

【讨论】:

  • 那没有任何作用。 1 aaaaaaa 2 bbbbbbb 3 bbbbbbb 4 ccccccc 5 aaaaaaa 6 ccccccc 变为 1 aaaaaaa 2 bbbbbbb 4 ccccccc
  • 抱歉,注意到您想保留最新的。固定。
  • +1,例如nl input.txt | sort -r -k2 | uniq -f 1 | sort | cut -f 2-perl 中的一些不那么老套的东西。
  • @AdrianFrühwirth 感谢您完成繁重的工作!但我觉得 perl 很难,所以我也向你致敬。
猜你喜欢
  • 2020-06-15
  • 2011-02-05
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多