作者beakdoosan (东大)
看板perl
标题[请益]新手请教一下
时间Tue Mar 6 22:13:12 2007
各位好啊,我是perl的超级新手,资历一个月
我有个档案(档名为session)内容为
192.168.1.123 1088 43009 68.142.233.138 5061 WAN2
192.168.1.191 1984 61313 202.43.199.246 80 WAN1
192.168.1.192 1728 61313 207.46.110.81 1863 WAN2
192.168.1.211 50464 49377 202.39.48.85 161 WAN1
192.168.1.131 1857 45826 68.142.233.167 5061 WAN1
192.168.1.108 1377 39458 168.95.192.1 53 WAN2
192.168.1.133 1665 46146 207.46.108.89 1863 WAN1
192.168.1.93 1025 35266 168.95.192.1 53 WAN1
192.168.1.191 1154 60483 168.95.192.1 53 WAN1
192.168.1.194 2563 62660 65.54.195.188 80 WAN1
192.168.1.131 1860 45829 202.43.193.120 5061 WAN1
192.168.1.190 2500 61573 216.239.63.189 80 WAN2
192.168.1.194 2564 62661 210.65.0.40 80 WAN1
192.168.1.124 1670 43847 203.133.33.106 80 WAN1
192.168.1.105 1479 38792 203.84.196.97 80 WAN2
192.168.1.131 1479 45448 216.155.193.131 119 WAN2
192.168.1.105 1480 38793 203.84.196.97 80 WAN2
192.168.1.191 1961 61290 202.43.199.246 80 WAN1
192.168.1.105 1482 38795 203.84.196.97 80 WAN2
192.168.1.196 1451 62060 220.133.85.118 1095 WAN2
我想要统计各个IP的连线总数,於是我写了下面的程式
#!/usr/bin/perl -w
$FileName = "./session";
$TempFile = "./temp";
#读取来源档
open (SRC_FILE, "$FileName");
open (TEMP_FILE, ">$TempFile");
#将读取到的sessio档去掉开头的空白後另存到TempFile里
while(<SRC_FILE>) {
$_ =~ s/^\s+//g;
print TEMP_FILE;
}
close(SRC_FILE);
close(TEMP_FILE);
open (TEMP_FILE, "$TempFile");
@array = <TEMP_FILE>;
close (TEMP_FILE);
#将项目拆解并存到各自的阵列
foreach (@array) {
($pri_ip, $pri_port, $pse_port, $peer_ip, $peer_port, $interface) = split(/\s+/, "$_");
push @pri_ip, $pri_ip;
push @pri_port, $pri_port;
push @pse_port, $pse_port;
push @peer_ip, $peer_ip;
push @peer_port, $peer_port;
push @interface, $interface;
}
#将储存IP的阵列排序
@s = sort {$a cmp $b} @pri_ip;
#记数归零
$counter = 1;
$i = 0;
{
# no warnings;
while( $i <= $#s ) {
if( $s[$i] eq $s[($i+1)] ) {
$counter++;
$i++;
} else {
print "$s[$i] => $counter\n";
$counter = 1;
$i++;
next;
}
}
}
问题来了当我执行到最後一个比较时就会出现如下错误,所以我只好在while上面
加上no warnings来避免错误讯息的产生
192.168.1.192 => 1
192.168.1.194 => 3
192.168.1.195 => 1
192.168.1.196 => 2
192.168.1.211 => 1
Use of uninitialized value in string eq at ./session.pl line 39.
192.168.1.93 => 1
想请教各位是否有更好的方式来处理呢?先谢谢您花时间看我的问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 221.169.170.106
1F:推 reizarc:单纯想统计 ip 出现次数的话, 用 hash 比较方便喔 :p 03/06 22:25
2F:推 chhuang:Array::PAT 看看~ 03/06 22:27
3F:→ reizarc:那个 warning 想必是 undef value, array accees 超出罗 03/06 22:30