比较Perl中任意一行的两个文件

时间:2015-08-13 11:52:41

标签: perl compare

我知道可以使用以下方法比较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";
 }

好吧,我很想知道是否可以比较所需行的文件。我有大量的文件,固定的行号后可能会有所不同。比较整个文件需要很长时间。然后我正在寻找最短的路!

2 个答案:

答案 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