【问题标题】:Keep only the last duplicate line只保留最后一个重复行
【发布时间】:2020-07-19 04:12:56
【问题描述】:

我有这个数据,如何使用 awk 删除第一个重复项 ($1$2$3)

785016 AGTCGCGTCCGT 142
785031 CGGCGTCGACTA 705
785031 CGGCGTCGACTA 705 CACTCCCCTGGAG
848841 GCTCAGTCAAAC 1595
848841 GCTCAGTCAAAC 1595    matched
848847 CAAATCGAGATC 1672
880844 TGCCGACGACAT 520
880844 TGCCGACGACAT 520 GTGTTCCGATCAG
880851 GACGACAACGTC 582

预期的输出是

785016 AGTCGCGTCCGT 142
785031 CGGCGTCGACTA 705 CACTCCCCTGGAG
848841 GCTCAGTCAAAC 1595    matched
848847 CAAATCGAGATC 1672
880844 TGCCGACGACAT 520 GTGTTCCGATCAG
880851 GACGACAACGTC 582

【问题讨论】:

  • 你的例子不对,或者标题不对。该示例显示删除 3 个重复项,而不是第一个 - 输出中缺少 3 行输入。
  • 此外,缺少的行是原始行,而不是重复行 - 保留重复行(例如第 3 行),但缺少 原始 行(分别为 2)。
  • 在您的问题中,添加您为解决问题而尝试做的事情。

标签: awk duplicates


【解决方案1】:

使用tacawk

tac file | awk '!a[$1,$2,$3]++' | tac

输出:

785016 AGTCGCGTCCGT 142 785031 CGGCGTCGACTA 705 CACTCCCCTGGAG 848841 GCTCAGTCAAAC 1595 匹配 848847 CAAATCGAGATC 1672 880844 TGCCGACGACAT 520 GTGTTCCGATCAG 880851 GACGACAACGTC 582

见:man tac

【讨论】:

  • 由于a bc => abcab c => abc,一般你不能通过直接连接字符串来创建唯一键。考虑到 OP 示例输入,您可能会侥幸成功,但使用 a[$1,$2,$3] 比使用 a[$1$2$3] 更加健壮和惯用,而且这样做没有不利的一面。
猜你喜欢
  • 2019-02-19
  • 1970-01-01
  • 2022-07-19
  • 2023-02-22
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2011-07-22
相关资源
最近更新 更多