我知道可以使用以下方法比较Perl中的两个文件:
use strict;
use warnings;
use File::Compare;
my $file1 = "example1.txt";
my $file2 = "Test_2.txt";
if (compare($file1,$file2) eq 0)
{
print "They're equal\n";
}else{
print "They aren't equal\n";
}
好吧,我很想知道是否可以比较所需行的文件。我有大量的文件,固定的行号后可能会有所不同。比较整个文件需要很长时间。然后我正在寻找最短的路!
答案 0 :(得分:3)
不确定。 compare
接受文件句柄和文件名,因此您只需打开文件并在调用compare
之前读取要忽略的行
此示例代码忽略了两个文件中的第一行。我希望您了解如何跳过给定数量的行,或者直到正则表达式模式匹配?
use strict;
use warnings;
use File::Compare 'compare';
open my $fh1, '<', 'file1.txt';
open my $fh2, '<', 'file2.txt';
# read past header lines
<$fh1>;
<$fh2>;
if ( compare( $fh1, $fh2 ) eq 0 ) {
print "They're equal\n";
}
else {
print "They aren't equal\n";
}
答案 1 :(得分:0)
假设感兴趣的区域位于以字符串BEGIN
开头的行之后。您可以直接丢弃两个文件中的所有行,直到您点击标记。这样做可以避免compare
功能的成本,但仍必须支付IO成本。
$_ = <$fh1> until /^BEGIN/;
$_ = <$fh2> until /^BEGIN/;
如果你有一些先验信息,例如,该区域永远不会在文件的前10兆字节内开始,那么你可以先seek
。