【问题标题】:awk remove duplicates based on two columns and custom duplication ruleawk 根据两列和自定义重复规则删除重复项
【发布时间】:2021-12-27 03:13:21
【问题描述】:

我想处理一个 CSV 输入文件,如下所示:

a;b
b;c
b;a
c;d
x;y
d;c

并删除规则定义的两个重复行:a;bb;a 被认为是重复的,因此应该删除,同样的规则适用于 c;dd;c,它们应该被删除。

我尝试处理文件两次并使用条件NR==FNR 来确定它是哪个通过(第一次或第二次),但我无法弄清楚如何对我上面定义的复制规则进行测试。

请帮帮我

【问题讨论】:

  • 您的意思是只针对这两个字符串,还是所有重复的字符串(例如y;xc;b)?

标签: linux csv awk


【解决方案1】:
$ awk -F';' '{ks[$0]; a[$2 FS $1]++} END{for(k in ks) if(!a[k]) print k}' file

x;y
b;c

【讨论】:

    【解决方案2】:

    请您尝试以下方法:

    awk -F';' '
    NR==FNR {                                       # 1st pass
        if (seen[$1$2]++ || seen[$2$1]++) {         # if "ab" or "ba" already exists
            dupe[$1";"$2]++; dupe[$2";"$1]++        # then mark "a;b" and "b;a" as duplicates
        }
        next
    }
    ! dupe[$0]                                      # print unless duplicates
    ' file file
    

    输出:

    b;c
    x;y
    

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2018-10-25
      • 2015-09-12
      • 2017-03-02
      • 2019-01-14
      • 2017-11-26
      • 2017-07-06
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多