这是一个文件,在第一列和第二列中重复的数据在不同的位置交换。
$ 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
可以解决这个问题吗?
答案 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