如何比较Perl中2个文件中的数据?

时间:2010-07-14 10:32:32

标签: perl

例如:

文件1:

Apple
Orange
grapes

文件2:

Orange
grapes
Apple 

我正在尝试检查两个文件是否以不同的顺序具有相同的数据。

如何在不使用任何外部模块的情况下进行操作?

5 个答案:

答案 0 :(得分:4)

这是将两个文件的每一行读入哈希然后比较两个哈希的内容的简单问题。基本上这是初学者的编程练习。

答案 1 :(得分:4)

use strict;
use warnings;

# $d{LINE} = TALLY
my ($n, %d) = (1);
while (<>){
    $d{$_} += $n;
    $n *= -1 if eof;
}

# Now get whatever kind of lines you are interested in.
my @same_in_both_files = grep { $d{$_} == 0 } keys %d;
my @surplus_in_file1   = grep { $d{$_} >  0 } keys %d;
my @surplus_in_file2   = grep { $d{$_} <  0 } keys %d;

# Or just get a true-false verdict.
my $files_differ = 1 if grep $_, values %d;

答案 2 :(得分:3)

如果您想使用perl查找两个文件之间的差异,可以尝试使用Text::Diff CPAN模块。

答案 3 :(得分:3)

手动完成它是一个简单的练习。将第一个文件读入line / linenumber的哈希表,然后从该表中删除第二个文件。如果存在一个肠道,请将其放入第二个表格。表中的任何内容都表示不匹配的内容,表中包含不同行的行号。

答案 4 :(得分:2)

以下是在perl中执行所需操作的简单方法:

在pfile1中:

Apple
Orange
grapes

在pfile2中:

Orange
grapes
Apple

perl脚本:

#!/usr/bin/env perl

open (FILE1, "pfile1") || die ("Can't open file pfile1 for reading");
open (FILE2, "pfile2") || die ("Can't open file pfile2 for reading");

my @file1 = <FILE1>;
my @file2 = <FILE2>;

@sorted_file1 = sort @file1;
@sorted_file2 = sort @file2;

die("Your Files are different\n")
  unless ($#sorted_file1 == $#sorted_file2);

for my $item (0 .. $#sorted_file1) {
  if ($sorted_file1[$item] ne $sorted_file2[$item]) {
    die("Your Files are different\n");
  }
}
print "Your Files are the same\n";

这可以通过将文件行读入数组,然后对数组进行排序来实现。它会检查两个数组的长度是否相同,如果两个数组之间的相应索引值不同,则会提前退出。

然后,您将收到一条消息,指出文件是否相同......或者不是。