如何在两个文件之间找到重复值并打印

时间:2013-02-14 14:49:40

标签: perl awk

我有两个文件,一个带有一个IP地址(我已经使用perl来剥离ip),另一个带有更多信息的ip。我需要做一个commpare或使用perl并在每个文件中找到重复的IP。但我需要第二个文件,其中包含更多信息,以及何时找到重复项打印第二个文件的整行。

file1内容示例(只是ip无逗号等)

114.42.141.131

file2内容示例(找到匹配时需要打印所有这些信息)

114.42.141.131,Host TW,Taipei,25.0391998291,121.525001526

这有点超出我的技能。任何帮助将不胜感激!!!

谢谢!

3 个答案:

答案 0 :(得分:2)

要匹配第一个字段,您只需要:

awk -F, 'FNR==NR { a[$1]; next } $1 in a' file1 file2

答案 1 :(得分:0)

我假设您有shell访问权限。

如果第一个文件只包含IP,那么您可以执行以下操作:

REF_IP=`cat file1`

然后,您可以使用第二个文件中的grep:

grep "${REF_IP}" file2

结果应该是带有重复地址的行。

注意:实际语法可能略有不同(我现在无法访问shell)

HTH

答案 2 :(得分:0)

看看这个oneliner,如果它是你想要的:

注意,这将仅在file2中打印重复的ip行一次。还假设file2中没有重复的ips。

 awk -F, 'NR==FNR{p[$1]=$0;next}{a[$0]++}END{for(x in a)if (a[x]>1)print p[x]}' file2 file1

小测试:

kent$  head f1 f2
==> f1 <==
1.1.1.1
1.1.1.1
1.1.1.1
2.2.2.2

==> f2 <==
1.1.1.1,Host TW,Taipei,25.0391998291,121.525001526
2.2.2.2,this is for 2.2.

kent$  awk -F, 'NR==FNR{p[$1]=$0;next}{a[$0]++}END{for(x in a)if (a[x]>1)print p[x]}' f2 f1
1.1.1.1,Host TW,Taipei,25.0391998291,121.525001526