[請益]新手請教一下
各位好啊,我是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
推
03/06 22:25, , 1F
03/06 22:25, 1F
推
03/06 22:27, , 2F
03/06 22:27, 2F
→
03/06 22:30, , 3F
03/06 22:30, 3F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章