open IN1,'<',$file1;
open IN2,'<',$file2;
open OUT,'>',$file_out;
my $line1 = <IN1>;
my $line2 = <IN2>;
while (1) {
# do this, when a file reaches its end
if (!defined $line1) {
# file1 ended, write lasting parts of file2
print OUT $line2;
while (<IN2>) { print OUT }
last;
}
if (!defined $line2) {
# file2 ended, vise versa
print OUT $line1;
while (<IN1>) { print OUT }
last;
}
# the main compare
if ($line1<$line2) {
print OUT $line1;
$line1 = <IN1>;
}
elsif ($line2<$line1) {
print OUT $line2;
$line2 = <IN2>;
}
else {
die "EXCEPTION: two identical lines: <$line1> and <$line2>";
}
}
程序局限:
file1 和 file2本身必须是排序完之后的。