acondor has asked for the wisdom of the Perl Monks concerning the following question:

Can someone help parcing/splitting data from telnet; Code below:
@check = $telnet->cmd(String=>$RTRVPM1); $response = join(" ", @check); print $response;
print response:

EQUIP-OME1 15-08-26 01:30:54 M CTAG COMPLD "OC48-1-14-2,OC48:OPRN-OCH,36,COMPL,NEND,RCV,1-DAY,08-25,00-00,1,, +,," "OC48-1-14-2,OC48:OPTN-OCH,97,COMPL,NEND,TRMT,1-DAY,08-25,00-00,1, +,,," "ETH-1-13-1,ETH:INFRAMES-E,978758,COMPL,NEND,RCV,1-DAY,08-25,00-00 +,1,,,," "ETH-1-13-1,ETH:OUTFRAMES-E,1057147,COMPL,NEND,TRMT,1-DAY,08-25,00 +-00,1,,,," > EQUIP-OME1 15-08-26 01:30:55 M CTAG COMPLD "OTM2-1-1-1,OTM2:OPR-OCH,-10.70,COMPL,NEND,RCV,1-DAY,08-25,00-00,1 +,,,," "OTM2-1-1-1,OTM2:OPT-OCH,-6.50,COMPL,NEND,TRMT,1-DAY,08-25,00-00,1 +,,,," > EQUIP-OME2 15-08-26 01:30:56 M CTAG COMPLD "OTM2-1-3-1,OTM2:FEC-OTU,30181635949,COMPL,NEND,RCV,1-DAY,08-25,00 +-00,1,,,," "OTM2-1-3-1,OTM2:PFBERE-OTU,1E-37,COMPL,NEND,RCV,1-DAY,08-25,00-00 +,1,,,," "OTM2-1-3-1,OTM2:PRFBER-OTU,3.3E-05,COMPL,NEND,RCV,1-DAY,08-25,00- +00,1,,,," ; <

I want to print actual responses with data that start with " "" (Space Space Double Quote) but also join equipment name to data comma separated. Do until ";" (semi colon).

Example output:

EQUIP-OME1,15-08-26,01:30:54,OC48-1-14-2,OC48:OPRN-OCH,36,COMPL,NEND,RCV,1-DAY,08-25,00-00,1,,,,"

EQUIP-OME1,15-08-26,01:30:54,OC48-1-14-2,OC48:OPTN-OCH,97,COMPL,NEND,TRMT,1-DAY,08-25,00-00,1,,,,"

EQUIP-OME1,15-08-26,01:30:54,ETH-1-13-1,ETH:INFRAMES-E,978758,COMPL,NEND,RCV,1-DAY,08-25,00-00,1,,,,"

EQUIP-OME1,15-08-26,01:30:54,ETH-1-13-1,ETH:OUTFRAMES-E,1057147,COMPL,NEND,TRMT,1-DAY,08-25,00-00,1,,,,"

etc...

Replies are listed 'Best First'.
Re: Parsing/Splitting data
by stevieb (Canon) on Aug 26, 2015 at 15:07 UTC

    Can you please post the same print data, but like the following instead? Although it's solvable as-is, it's much easier with raw data.

    use Data::Dumper; print Dumper \@check;

    The data of a single pass will be sufficient.

      Thanks for quick response, here is the response:
      $VAR1 = [ '< ', ' ', ' EQUIP-OME1 15-08-26 15:19:13 ', 'M CTAG COMPLD ', ' "OC192-1-1-2,OC192:OPR-OCH,-10.20,COMPL,NEND,RCV,1-DAY,0 +8-25,00-00,1,,,," ', ' "OC192-1-1-2,OC192:OPT-OCH,-3.50,COMPL,NEND,TRMT,1-DAY,0 +8-25,00-00,1,,,," ', '> ', ' ', ' 123-EQUIP-OME2 15-08-26 15:19:25 ', 'M CTAG COMPLD ', ' "OC12-1-3-7,OC12:OPRN-OCH,-89,COMPL,NEND,RCV,1-DAY,08-25 +,00-00,1,,,," ', ' "OC12-1-3-7,OC12:OPTN-OCH,0,ADJ,NEND,TRMT,1-DAY,08-25,00 +-00,1,,,," ', '> ', ' ', ' 115-EQUIP-OME5 15-08-26 15:19:26 ', 'M CTAG COMPLD ', ' "OC12-1-4-7,OC12:OPRN-OCH,-79,COMPL,NEND,RCV,1-DAY,08-25 +,00-00,1,,,," ', ' "OC12-1-4-7,OC12:OPTN-OCH,0,ADJ,NEND,TRMT,1-DAY,08-25,00 +-00,1,,,," ', ' "OC12-1-4-8,OC12:OPR-OCH,-14.04,COMPL,NEND,RCV,1-DAY,08- +25,00-00,1,,,," ', '> ', ' ', ' EQUIP-OME8 15-08-26 15:19:27 ', 'M CTAG COMPLD ', ' "ETH10G-1-13-2,ETH10G:OPT-OCH,-3.20,COMPL,NEND,TRMT,1-DA +Y,08-25,00-00,1,,,," ', ' "ETH10G-1-13-2,ETH10G:OPRN-OCH,-17,COMPL,NEND,RCV,1-DAY, +08-25,00-00,1,,,," ', '; ' ];

        Remove the join statement, then I think this does what you're after:

        my %data; my $device; for (@check){ next if ! /\d{1,2}-\d{1,2}/; chomp; s/\s+//g; if (/EQUIP-OME/){ $device = $_; next; } push @{$data{$device}}, $_; } for my $device (keys %data){ for my $interface (@{$data{$device}}){ print "$device,$interface\n"; } }

        Output:

        EQUIP-OME815-08-2615:19:27,"ETH10G-1-13-2,ETH10G:OPT-OCH,-3.20,COMPL,N +END,TRMT,1-DAY,08-25,00-00,1,,,," EQUIP-OME815-08-2615:19:27,"ETH10G-1-13-2,ETH10G:OPRN-OCH,-17,COMPL,NE +ND,RCV,1-DAY,08-25,00-00,1,,,," 115-EQUIP-OME515-08-2615:19:26,"OC12-1-4-7,OC12:OPRN-OCH,-79,COMPL,NEN +D,RCV,1-DAY,08-25,00-00,1,,,," 115-EQUIP-OME515-08-2615:19:26,"OC12-1-4-7,OC12:OPTN-OCH,0,ADJ,NEND,TR +MT,1-DAY,08-25,00-00,1,,,," 115-EQUIP-OME515-08-2615:19:26,"OC12-1-4-8,OC12:OPR-OCH,-14.04,COMPL,N +END,RCV,1-DAY,08-25,00-00,1,,,," EQUIP-OME115-08-2615:19:13,"OC192-1-1-2,OC192:OPR-OCH,-10.20,COMPL,NEN +D,RCV,1-DAY,08-25,00-00,1,,,," EQUIP-OME115-08-2615:19:13,"OC192-1-1-2,OC192:OPT-OCH,-3.50,COMPL,NEND +,TRMT,1-DAY,08-25,00-00,1,,,," 123-EQUIP-OME215-08-2615:19:25,"OC12-1-3-7,OC12:OPRN-OCH,-89,COMPL,NEN +D,RCV,1-DAY,08-25,00-00,1,,,," 123-EQUIP-OME215-08-2615:19:25,"OC12-1-3-7,OC12:OPTN-OCH,0,ADJ,NEND,TR +MT,1-DAY,08-25,00-00,1,,,,"

        -stevieb