删除重复的bash

时间:2014-07-24 16:04:35

标签: bash shell awk

嗨我想要一个衬垫从两个文件中删除密钥对中的重复

第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

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