繁体   English   中英

UNIX删除名称互换的重复项

[英]unix remove duplicates with swapped names

这是一个文件,在不同的位置交换了column1和2中的重复数据。

$ cat partnership.dat
V_Kohli|Yuvraj_Singh|57
PA_Patel|CH_Gayle|5
CH_Gayle|V_Kohli|18
MA_Starc|S_Rana|14
S_Rana|MA_Starc|14
V_Kohli|CH_Gayle|18
CH_Gayle|PA_Patel|5
Yuvraj_Singh|V_Kohli|57
V_Kohli|AB_de_Villiers|61
AB_de_Villiers|V_Kohli|61
S_Rana|AB_de_Villiers|5
AB_de_Villiers|S_Rana|5

我正在尝试删除重复项并获取以下数据

V_Kohli|Yuvraj_Singh|57
PA_Patel|CH_Gayle|5
CH_Gayle|V_Kohli|18
MA_Starc|S_Rana|14
V_Kohli|AB_de_Villiers|61
S_Rana|AB_de_Villiers|5

下面的awk命令列出了所有记录。

awk -F"|" ' NR==FNR {a[$1]=$2;b[$2$1]=$3;next} ($2$1 in b) { print }' partnership.dat partnership.dat

这可以解决吗?

您可以简单地通过制作散列图来对文件进行分组,先从$1 $2取出密钥,再从$2 $1取出密钥。 这样,我们仅在与$1$2的顺序无关的情况下唯一地识别一行

awk -F'|' '!unique[$1 FS $2]++ && !unique[$2 FS $1]++' partnership.dat

惯用的awk方法使用的内存是使用两个不同数组索引(以它们可能的不同顺序)的字段的一半:

$ awk -F'|' '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
V_Kohli|Yuvraj_Singh|57
PA_Patel|CH_Gayle|5
CH_Gayle|V_Kohli|18
MA_Starc|S_Rana|14
V_Kohli|AB_de_Villiers|61
S_Rana|AB_de_Villiers|5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM