2011-09-04 5 views
1

J'ai un fichier contenant un numéro de port et une adresse IP dans une chaîne. Je dois extraire les adresses IP, calculer le numéro de port selon la formule et le comparer au numéro de port dans le fichier et imprimer ceux qui ne correspondent pas. Si l'adresse IP est W.X.Y.Z, la formule pour le numéro de port est 50000 + 200 (Y) + Z. Le fichier texte a le format suivant.Comment extraire les adresses IP et les numéros de port en utilisant Perl et le comparer

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

Quelle est la meilleure façon de le faire?

#!/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"; 

} 

Répondre

4

rapide et sale:

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

Bien sûr, vous voulez réécrire ce dans un programme agréable :)

Paul

+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"; 
}} 
Questions connexes