johngg@shiraz:~/perl/Monks$ perl -Mstrict -Mwarnings -E ' open my $inFH, q{<}, \ <<__EOD__ or die $!; keyword1 data1 data2 data3 keyword2 data1 data2 data3 data4 data5 data6 keyword1 data1 data2 data3 data4 keyword3 data1 __EOD__ my @dataLines = <$inFH>; chomp @dataLines; close $inFH or die $!; for my $idx ( reverse 0 .. $#dataLines ) { next if $dataLines[ $idx ] =~ m{^keyword}; $dataLines[ $idx - 1 ] .= splice @dataLines, $idx, 1; } say for @dataLines;' keyword1 data1 data2 data3 keyword2 data1 data2 data3 data4 data5 data6 keyword1 data1 data2 data3 data4 keyword3 data1