2011-09-04 65 views
1

我有一個包含字符串中的端口號和IP地址的文件。我要提取的IP地址,根據公式計算的端口號,並將其與文件中的端口號,並打印不匹配的人。如果IP地址是W.X.Y.Z,則端口號的公式爲50000 + 200(Y)+ Z。 文本文件格式如下。如何提取IP地址和使用Perl的端口號,並比較其

exchangeA_5 = 53413; 239.189.17.13 7990

exchangeA_6 = 53415; 239.189.17.15 7990

exchangeA_e = 53470; 239.189.27.70 7990

exchangeA_5 = 53468; 239.189.27.68 7990

什麼是做到這一點的最好方法是什麼?

#!/usr/bin/perl 
use strict; 
use warnings; 

open(my $fh, '<', 'fileC') 
or die("Can't open fileC: $!\n"); 

while (<$fh>) { 
    chomp; 
    my ($key, $val) = split /=/; 
    #print "$key\n"; 
    #print "$val\n"; 

    my ($port, $ip) = split /[;]/, $val; 
    print "$port\n"; 
    print "$ip\n"; 

} 

回答

4

快速和骯髒的:

perl -ne '($host, $port, @ip) = split /[=;.]/; print if $port != 50000+200*$ip[2]+$ip[3]' fileC 

當然,要改寫成一個不錯的節目:)

保羅

+6

'perl的-F \\ W此-nae'$ F [1] -50000- $ F [5] * 200- $ F [6] && print'' – ysth

0
open(my $fh, '<', 'fileC.txt'); 
while (<$fh>) { 
    chomp; 
    if (!/^$/){ 
    ($Host,$port, @IP) = split /[=;.]/; 
    print "Host:$Host, IP:", (join '.',@IP),", and Port:$port\n"; 
}}