Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Split() first 3 elements of @array

by philiprbrenan (Monk)
on Aug 28, 2012 at 18:46 UTC ( #990303=note: print w/ replies, xml ) Need Help??


in reply to Split() first 3 elements of @array

Select the first 3 elements of an array as:

@array[0..2]

exerting care in case there are less than 3 elements.

use feature ":5.14"; use warnings FATAL => qw(all); use strict; use Data::Dump qw(dump); my @RouterOutput = split /\n/, << 'END'; 1 AAAA BBBB CCCC 2 AAAA BBBB CCCC 3 AAAA BBBB CCCC 4 AAAA BBBB CCCC END for(@RouterOutput[0..2]) {say "@{[split]}[0,3,2,1]" if $_; }

Produces

1 CCCC BBBB AAAA
2 CCCC BBBB AAAA
3 CCCC BBBB AAAA


Comment on Re: Split() first 3 elements of @array
Select or Download Code
Re^2: Split() first 3 elements of @array
by hmb104 (Sexton) on Aug 28, 2012 at 19:10 UTC

    Thanks for the suggestions. I have tried 2 ways and I still can't get some of the info. Lets assume the lines that I store at my @array are the following:

    Device ID: switch1.Core-3750.abc.com Entry address(es): IP address: 10.10.10.10 Platform: cisco WS-C3750G-12S, Capabilities: Router Switch IGMP Interface: GigabitEthernet1/0/28, Port ID (outgoing port): GigabitEth +ernet2/0/7 Holdtime : 145 sec Version : Cisco IOS Software, C3750 Software (C3750-IPSERVICESK9-M), Version 12. +2(55)SE4, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2011 by Cisco Systems, Inc. Compiled Tue 06-Sep-11 02:59 by prod_rel_team advertisement version: 2 Protocol Hello: OUI=0x00000C, Protocol ID=0x0112; payload len=27, val +ue=00000000FFFFFFFF01022507000000000000A8B1D400F080FF0000 VTP Management Domain: 'networks' Native VLAN: 1 Duplex: full

    I can extract the switch name but I cannot sxtract the IP address for the switch for some reason

    foreach $Line ( @RouterOutput ) { if ( $Line =~ m/^Device / ) { @Data = split( ' ', $Line ); $SwitchName = $Data[ 2 ] ; last ; } if ( $Line =~ m/^IP / ) { @Data = split( ' ', $Line ); $SwitchIP = $Data[ 2 ] ; last ; } }

      Try the following:

      use Modern::Perl; my @RouterOutput = <DATA>; my $RouterOutput = join ' ', @RouterOutput; my ( $SwitchName, $SwitchIP ) = $RouterOutput =~ /Device\s+ID:\s+([^\s]+).+IP\s+address:\s+([^\s]+)/ +s; say "$SwitchName\n$SwitchIP"; __DATA__ Device ID: switch1.Core-3750.abc.com Entry address(es): IP address: 10.10.10.10 Platform: cisco WS-C3750G-12S, Capabilities: Router Switch IGMP Interface: GigabitEthernet1/0/28, Port ID (outgoing port): GigabitEth +ernet2/0/7 Holdtime : 145 sec Version : Cisco IOS Software, C3750 Software (C3750-IPSERVICESK9-M), Version 12. +2(55)SE4, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2011 by Cisco Systems, Inc. Compiled Tue 06-Sep-11 02:59 by prod_rel_team advertisement version: 2 Protocol Hello: OUI=0x00000C, Protocol ID=0x0112; payload len=27, val +ue=00000000FFFFFFFF01022507000000000000A8B1D400F080FF0000 VTP Management Domain: 'networks' Native VLAN: 1 Duplex: full

      Output:

      switch1.Core-3750.abc.com 10.10.10.10
      I cannot sxtract the IP address for the switch for some reason

      The third line, with the IP address is indented: there is some whitespace at the beginning of the line, but your regular expression is looking for 'IP' at the beginning of the line: /^IP/. Change that to accept some leading whitespace and you should get a match: /^\s*IP/

        use Modern::Perl; use Modern::Perl; say ' IP address: 10.10.10.10' =~ /IP\s+address:\s+([^\s]+)/; say 'IP address: 10.10.10.10' =~ /IP\s+address:\s+([^\s]+)/; say ' IP address: 10.10.10.10' =~ /^\s*IP\s+address:\s+([^\s]+)/; say 'IP address: 10.10.10.10' =~ /^\s*IP\s+address:\s+([^\s]+)/;

        Output:

        10.10.10.10 10.10.10.10 10.10.10.10 10.10.10.10

        Update: Ah! hmb104 was referring to using split, not the regex (which isn't attempting to match at the beginning of a line and is fully anchored w/o mentioning the spaces before "IP address:").

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://990303]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (6)
As of 2015-07-04 22:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls