my %out; while () { if ( /##head##/ ) { if ( %out ) { print join ',', $out{servername}, @{ $out{serverip} }; print "\n"; } %out = (); } $out{servername} = $1 if /^servername\s+(.*)/; push @{$out{serverip}}, $1 if /^serverip:\s+(.*)/; } __DATA__ ##head## servername abc xxx xxx serverip: 123 xxx ##head## -------- ##head## servername def xxx xxx serverip: 456 serverip: 445566 xxx ##head## ##head## servername ghi xxx xxx serverip: 789 xxx ##head## #### abc,123 def,456,445566 ghi,789