in reply to Re^3: just another search program
in thread just another search program

Hello
#use strict; #use warnings; $/=undef; $d=<DATA>; print " Hello\n"; print if $d=~ /Device |interface |VRID|state|primary address/i; my (@ip)=($d=~m/number addresses(?:.*?)((?:\d{1,3}\.){3}\d{1,3})/gsi); print "The addresses are: ". join("\n",@ip)."\n"; __DATA__ logging to Device F01 is 19.9.16.11... Showing the vrrp status VRRP Interfaces Interface WEB_A Authentication: NoAuthentication VRID 39 State: Master Time since transition: 582693 hfghfghfghghghfghfhhfgh Primary address: 195.51.205.220 Number addresses: 1 195.51.205.222 Monitored circuits: Afgh_A (priority 1fgh50) SRghf1 (priority 1fgh50) Interface DATA_DL Nufghfghmber of vhfghl roufgh Fgfhfghs: AuthefghfgntichoAhfhication VRID 2556 State: Master Time since transition: 13405375 Bahfgh Flafghfghgs: Advertfghdl: 1 Rfghfghfgval: 3fghfghfgh fghfsgh VfghfghVRghfg Vh Primary address: 19.18.27.65 Next advertisement: 0 Number addresses: 1 15.12.57.234 I logging to Device L2 is 14.359.1.2... Showing the vrrp status VRRP Interfaces Interface SDC_A Nughujgj AuthentijghjghjNoAuthentication VRID 9 State: Backup Time since transition: 582695 Mghjghjer: hgjghjghj0 BahhjFlags: Adverghjad Interval: 3 VMAChj VMAhj1:ef Primary address: 195.51.205.221 Masghjghjg Number addresses: 1 195.51.205.222 Interface SA Numbehgjghjr of virtualj: 1 Fghjg Authentijghjtion VRID 7 State: Backup Time since transition: 582695 Master: 62.187.224.12 Baseghjghj4 Flags: Advertisement ihjghjRouterhjghj3jghjVRRP VMAC: ghj:01jghj Primary address: 62.187.224.13 Mastghjghj Number addresses: 1 6.17.26.14
This is my code and gives the output as ip address below the "number address" but the getting the device name,interface name,VRID,State,primary address is not happening.

any help on this ? i m missing something ?

Replies are listed 'Best First'.
Re^5: just another search program
by GrandFather (Saint) on Feb 14, 2006 at 10:20 UTC

    This may be what you want now, but really you need to sort out what problem you actually need to solve.

    Note that this is still reading the data a line at a time rather than slurping the data as your code was. Unless this code is part of something larger that needs to further process the original data there is no advantage in slurping everything. Even if you did need to process the data further, you would be better to slurp into an array than to slurp the whole thing into a scalar.

    use strict; use warnings; my $dumpIPs = 0; while (<DATA>) { if ($dumpIPs and /((\d{1,3}\.){3}\d{1,3})/) { print "$1 "; } elsif ($dumpIPs) { print "\n\n"; $dumpIPs = 0; } if (/\b(?:Device|interface|VRID|state|primary address)\b/i) { print; $dumpIPs = 0; } $dumpIPs ||= /Number addresses/; }

    Prints:

    logging to Device F01 is 19.9.16.11... Interface WEB_A VRID 39 State: Master Time since transition: Primary address: 195.51.205.220 195.51.205.222 Interface DATA_DL VRID 2556 State: Master Time since transition: Primary address: 19.18.27.65 15.12.57.234 logging to Device L2 is 14.359.1.2... Interface SDC_A VRID 9 State: Backup Time since transition: Primary address: 195.51.205.221 195.51.205.222 Interface SA VRID 7 State: Backup Time since transition: Primary address: 62.187.224.13 6.17.26.14

    DWIM is Perl's answer to Gödel
      #usr/bin/perl use Spreadsheet::WriteExcel; my $workbook = Spreadsheet::WriteExcel->new("vrrp.xls"); my $worksheet = $workbook->add_worksheet(); $worksheet->write ("A1", 'Device'); $worksheet->write ("B1", 'Interface Name'); $worksheet->write ("C1", 'VRID'); $worksheet->write ("D1", 'State'); $worksheet->write ("E1", 'Primary ip address'); $worksheet->write ("F1", 'VRRP Address'); my $row = 2; my $line = ''; my $device; open inFile, '<', 'svrrp.txt' or die "Couldn't open svrrp.txt: $!"; while (! eof inFile) { $line .= ' ' . <inFile>; chomp $line; next if ! ($line =~ /logging\sto\sDevice\s(.*?)\s+/i) and ! eo +f inFile; my $nextDevice = $1; next if ! ($line =~ /Interface\s(.*?)\s+/i) ; my $nextInterface = $1; #next if ! ($line =~ /Interface\s(.*?)\s+/i) ; #my $nextInterface = $1; { if ($line=~ m[ (?=.*? nterface \s+ (\S+) ) (?=.*? VRID \s+ (\ +S+) ) (?=.*? State: \s+ (\S+ +) ) (?=.*? Primary\saddress: \s+ (\S+) +)]smx) { $worksheet->write("A$row", "$device"); $worksheet->write("B$row", "$1"); $worksheet->write("C$row", "$2"); $worksheet->write("D$row", "$3"); $worksheet->write("E$row", "$4"); my (@ip)=($line=~m/number addresses(?:.*?) +((?:\d{1,3}\.){3}\d{1,3})/gsi); print "The addresses are: ". join("\n",@ip +)."\n\n"; print " end\n\n"; $worksheet->write("F$row", join("\n",@ip) +); ++$row; } else { print "no match found\n" + ; } print "$device,$Interface,$1, $2, $3, $4 \n"; } $Interface = $nextInterface; ++$row; $device = $nextDevice; $line = " "; } close inFile; $workbook->close();
      can you figure out what is the problem in this ?