$record_length = 11; $string_sought = 'whatever'; open (SOURCEFILE, "file_and_path"); @SOURCEFILE_LINES = ; close(SOURCEFILE); $m = 0; $n = 0; for $i (0 .. $#SOURCEFILE_LINES-$record_length) { if ($SOURCEFILE_LINES[$i+1] =~ m/$string_sought/) { for $j (0 .. $record_length-1) { $TYPE_1_LINES[$m] = $SOURCEFILE_LINES[$i+$j]; $m++; } $i = $i+$record_length; } else { $OTHER_LINES[$n] = $SOURCEFILE_LINES[$i]; $n++; } } finish off last few lines - if sought record not found by now, there can't be another one for $i ($#SOURCEFILE_LINES-$record_length+1 .. $#SOURCEFILE_LINES) { $OTHER_LINES[$n] = $SOURCEFILE_LINES[$i]; $n++; } #now write your two arrays to separate files, overwriting SOURCEFILE if you like with @OTHER_LINES.