UNIX删除名称互换的重复项

时间:2019-07-29 03:54:20

标签: awk

这是一个文件,在第一列和第二列中重复的数据在不同的位置交换。

$ 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

可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以简单地通过制作散列图来对文件进行分组,先从$1 $2中取出密钥,再从$2 $1中取出密钥。这样,我们仅在与$1$2

无关的情况下唯一地识别行。
awk -F'|' '!unique[$1 FS $2]++ && !unique[$2 FS $1]++' partnership.dat

答案 1 :(得分:1)

惯用的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