awk 根据两列和自定义重复规则删除重复项
Posted
技术标签:
【中文标题】awk 根据两列和自定义重复规则删除重复项【英文标题】:awk remove duplicates based on two columns and custom duplication rule 【发布时间】:2021-12-27 03:13:21 【问题描述】:我想处理一个 CSV 输入文件,如下所示:
a;b
b;c
b;a
c;d
x;y
d;c
并删除规则定义的两个重复行:a;b
和 b;a
被认为是重复的,因此应该删除,同样的规则适用于 c;d
和 d;c
,它们应该被删除。
我尝试处理文件两次并使用条件NR==FNR
来确定它是哪个通过(第一次或第二次),但我无法弄清楚如何对我上面定义的复制规则进行测试。
请帮帮我
【问题讨论】:
您的意思是只针对这两个字符串,还是所有重复的字符串(例如y;x
、c;b
)?
【参考方案1】:
$ awk -F';' 'ks[$0]; a[$2 FS $1]++ ENDfor(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
【讨论】:
以上是关于awk 根据两列和自定义重复规则删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
从数据框中删除重复项,基于两列 A,B,在另一列 C 中保持具有最大值的行