Table=Begin,,,, A, B, C, D, E Value,Value,Value,Value,Value 455,0,0,0,0 135,0,0,0,0 199,0,0,0,0 Table=End,,,, Table=Begin,,,, F, G, H Value,Value,Value 45235,0,0 13524,0,0 Table=End,,,, #### A, B, C, D, E, G, H 455,0,0,0,0,45235,0,0 135,0,0,0,0,13524,0,0 #### use strict; use Data::Dumper; open (my $IN, '<', $input_dir.$each_file) or die "cannot open $each_file for writing: $!"; local $/ = "Table="; # Based on the 'RTRV' and split the metric groups my @all_metrics= (); while( my $record = <$IN>) { chomp; push (@tables,$record); } open ( my $outFileHandle, '+>', "sample.csv") or die "cannot open $newFile for writing: $!"; my @body=(); my @convert_body= (); foreach my $each_table_grp(@tables) { $each_table_grp =~ m{Value(.+?)Table}gis; push(@body, $1); } my @unique_body = (); foreach my $elem(@body) { next if $seen{ $elem }++; $elem =~ s{,Value}{}gis; push (@unique_body, $elem); } print Dumper(@unique_body); foreach my $body_val(grep /(.+)/, @unique_body) { print $outFileHandle $body_val; }