如何在两个文件中搜索重复的用户,然后打印这些行?

时间:2011-03-31 19:22:23

标签: for-loop awk grep

我有两个文件:FILE1和FILE2: FILE1:

user1        1.1.1.1
user2        2.2.2.2
user3        3.14.14.3
user4        4.4.4.4
user5        198.222.222.222

FILE2

user1        99.22.54.214
user66       45.22.88.88
user99       44.55.66.66
user4        8.8.8.8
user39       54.54.54.54
user2        2.2.2.2

输出文件

user1        1.1.1.1
user1        99.22.54.214
user2        2.2.2.2
user4        4.4.4.4
user4        8.8.8.8

我尝试了for循环,但取得了特别的成功。 任何人都可以给我写一个代码吗? THX!

2 个答案:

答案 0 :(得分:1)

我可能会遗漏一些东西,但我认为“排序独特”应该给出正确答案。

$ sort -u file1 file2
user1        1.1.1.1
user1        99.22.54.214
user2        2.2.2.2
user3        3.14.14.3
user39       54.54.54.54
user4        4.4.4.4
user4        8.8.8.8
user5        198.222.222.222
user66       45.22.88.88
user99       44.55.66.66

当然,除非您提供的输出文件是您期望的整个输出。由于你没有说明从输出中删除行,我假设你想要所有这些。

答案 1 :(得分:0)

请务必先放大文件,在这种情况下是file2

awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1

概念证明

$ awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1
user1   1.1.1.1
user1   99.22.54.214
user2   2.2.2.2
user4   4.4.4.4
user4   8.8.8.8

或者,你可以使用它,但它需要两次调用awk,因此性能不会那么快:

awk 'FNR==NR{a[$1]=$2;next}(a[$1]){print $1,$2 RS $1,a[$1]}' OFS='\t' file2 file1 | awk '!a[$0]++'