awk 根据两列和自定义重复规则删除重复项

awk remove duplicates based on two columns and custom duplication rule

我想像下面这样处理 CSV 输入文件:

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

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

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

请帮帮我

请您尝试以下操作:

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

输出:

b;c
x;y
$ awk -F';' '{ks[[=10=]]; a[ FS ]++} END{for(k in ks) if(!a[k]) print k}' file

x;y
b;c