嗨我想要一个衬垫从两个文件中删除密钥对中的重复
第5和第6列是键值对
awk'{print $ 5“\ t”$ 6}'file1 file2 |排序
64963661 3
649963655 3
649963655 8
649963658 3
649963658 3
649963660 3
649963660 3
649963660 3
649963661 3
awk '{print $5"\t"$6}' file1 file2 | sort |uniq -d
649963658 3
649963660 3
我必须得到以下输出(没有重复项。)
64963661 3
649963655 3
649963655 8
649963661 3
答案 0 :(得分:2)
假设您希望打印整个输入行(如果没有,请更新您的问题):
awk '!seen[$5,$6]++' file1 file2
鉴于您更新的问题:
$ awk '{cnt[$0]++} END{for (rec in cnt) if (cnt[rec] == 1) print rec}' file
649963661 3
649963655 8
64963661 3
649963655 3
如果您关心保留输入订单:
$ awk '!seen[$0]++{recs[++numRecs]=$0} {cnt[$0]++} END{for (recNr=1;recNr<=numRecs;recNr++) if (cnt[recs[recNr]] == 1) print recs[recNr]}' file
64963661 3
649963655 3
649963655 8
649963661 3
答案 1 :(得分:1)
告诉sort使用第5列和第6列并使用唯一:
sort -u -k5,6 file1 file2
答案 2 :(得分:0)
试试这个awk
:
awk '{ ++a[$5, $6]; b[$5, $6] = $0 } END { for (i in a) if (a[i] == 1) print b[i] }' file
按顺序:
awk '{ key = $5 "|" $6 } !a[key]++ { b[key] = $0; keys[i++] = key } END { for (i = 0; i in keys; ++i) { key = keys[i]; if (a[key] == 1) print b[key] } }' file