例如:
文件1:
Apple
Orange
grapes
文件2:
Orange
grapes
Apple
我正在尝试检查两个文件是否以不同的顺序具有相同的数据。
如何在不使用任何外部模块的情况下进行操作?
答案 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)
答案 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";
这可以通过将文件行读入数组,然后对数组进行排序来实现。它会检查两个数组的长度是否相同,如果两个数组之间的相应索引值不同,则会提前退出。
然后,您将收到一条消息,指出文件是否相同......或者不是。