能统计两个文件中的ip地址的数量吗?

能统计两个文件中的ip地址的数量吗?

需求:
一个文件file1内容为:
10.10.10.1
10.20.20.1
10.30.30.1
另一个文件file2内容为:
10.10.10.0
10.20.20.0
10.40.30.0
10.10.1.0
。。。。。。


需要以file1中的每一行为关键字,看file2中是否能包含这样的ip地址,最终将这些包含地址的数量和不包含这些地址的数量统计出来,
即结果应该显示为:

包含的地址数量 2
不包含的地址数量 1

我该如何编写呢?用grep比较吗


[Copy to clipboard] [ - ]
CODE:
for i in `cat file1`
do
NUM=`grep $i file2|wc -l`
echo "包含的地址数量为:"$NUM
done

不包含的数目是不是只要总行数减一下包含数就行了啊?没经过测试的,直接写的,有错误还望改正
#!/bin/sh
export yes=0;
export no=0
for i in $(cat file1.txt | egrep -o "\b[0-9]+\.[0-9]+\.[0-9]+")
do
if [ "`egrep \"\b$i\" file2.txt`" == "" ]
then
let no=$no+1
else
let yes=$yes+1
fi
done
echo "$yes" ips match
echo "$no" ips unmatach
我莫不是到了shell版?


QUOTE:
原帖由 dicc 于 2008-10-13 16:46 发表

for i in `cat file1`
do
NUM=`grep $i file2|wc -l`
echo "包含的地址数量为:"$NUM
done

不包含的数目是不是只要总行数减一下包含数就行了啊?没经过测试的,直接写的,有错误还望改正

echo "包含的地址数量为: $(grep -Ff file1 file2 | wc -l)"
echo "不包含的地址数量为: $(grep -vFf file1 file2 | wc -l)"
用hash比较方便, 用第一个文件的ip地址做key, 第二个文件中出现的次数作值
落叶季节,思念季节


QUOTE:
原帖由 doiob 于 2008-10-20 13:23 发表
我莫不是到了shell版?

呵呵,用system吧。

my %net;
my $other_ip = 0;
my $mask = "255.255.255.0";

open FH2, "<file2" or die $!;
while (<FH2>) {
    chomp;
    $net{$_} = 0;
}
close FH2;

open FH1, "<file1" or die $!;
while (<FH1>) {
     chomp;
     my $net_addr = ip_2_netaddr($_, $mask);

     if (defined $net{$net_addr}) {
          $net{$net_addr}++;
     } else {
          $other_ip++;
     }
}
close FH1;
楼上这脚本搞复杂了吧,ip_2_netaddr是啥意思,不需要做什么转换啊


QUOTE:
原帖由 dl0622 于 2008-10-20 23:11 发表
楼上这脚本搞复杂了吧,ip_2_netaddr是啥意思,不需要做什么转换啊

仅供参考。

QUOTE:
file1
10.10.10.1
10.20.20.1
10.30.30.1
另一个文件file2内容为:
10.10.10.0
10.20.20.0
10.40.30.0
10.10.1.0

我以为file1中是ip, file2中是网络地址



QUOTE:
原帖由 doiob 于 2008-10-20 13:23 发表
我莫不是到了shell版?

你还别说,真有几位哥们想的还真周到,