$old_header = `head -1 $old_csv`; # split that later # get $new_header same way, if it's different from $old_header open( OLD, "tail +2 $old_csv | sort |" ) or die $!; open( NEW, "tail +2 $new_csv | sort |" ) or die $!; # proceed with interleaved reading as planned...