#!/usr/bin/perl use strict; use warnings; use Data::Dumper::Simple; my ($Rec,$pc_name); while () { $pc_name = $1, next if (/(port-channel \d+)$/); $Rec->{$pc_name}->{$1} = $2 if (m|(fc\d+/\d+)\s+\[(\w+)\]|); } print Dumper($Rec); __DATA__ port-channel 1 Administrative channel mode is on Operational channel mode is on Last membership update succeeded First operational port is fc1/5 2 ports in total, 2 ports up Ports: fc2/5 [up] fc1/5 [up] * port-channel 3 Administrative channel mode is on Operational channel mode is on Last membership update succeeded First operational port is fc1/1 1 port in total, 1 port up Ports: fc1/1 [up] * #### $Rec = { 'port-channel 3' => { 'fc1/1' => 'up' }, 'port-channel 1' => { 'fc1/5' => 'up', 'fc2/5' => 'up' } };