我想在两个文件中匹配两个不同的文件,但不使用哈希函数。但我不知道这样做。你能帮忙吗
这是我的意见:
delhi
bombay
kolkata
shimla
ghuhati
london
delhi
jammu
punjab
shimla
delhi
shimla
#/usr/bin/perl
use strict;
use warnings;
my @line1 = <file1>;
my @line2 = <file2>;
while (<file1>) {
do stuff;
}
答案 0 :(得分:0)
当然,您可以在不使用哈希的情况下以非常低效的方式执行此操作:
my @line1 = <file1>;
my @line2 = <file2>;
foreach (@line1) {
if (isElement($_, \@line2)) {
print;
}
}
sub isElement {
my ($ele, $arr) = @_;
foreach (@$arr) {
if ($ele eq $_) {
return 1;
}
}
return 0;
}
答案 1 :(得分:0)
你真的需要一个很好的理由不使用哈希来解决这个问题。这是家庭作业吗?
这将按照你的要求行事。它将所有file1
读入数组,然后一次读取file2
一行,使用grep
检查名称是否出现在数组中。
use strict;
use warnings;
use autodie;
my @file1 = do {
open my $fh, '<', 'file1.txt';
<$fh>;
};
chomp @file1;
open my $fh, '<', 'file2.txt';
while (my $line = <$fh>) {
chomp $line;
print "$line\n" if grep { $_ eq $line } @file1;
}
<强>输出强>
delhi
shimla
答案 2 :(得分:0)
你不想使用哈希?我可以使用模块吗?
最简单的方法可能是避免使用Perl,但使用Unix sort
和comm
实用程序:
$ sort -u file1.txt > file1.sort.txt
$ sort -u file2.txt > file2.sort.txt
# comm -12 file1.sort.txt file2.sort.txt
comm
实用程序打印出三列:第一列是仅在第一个文件中找到的行。第二列是仅在第二个文件中找到的行,最后一列是在两个文件中找到的行。 -12
参数禁止打印#1和#2列,只为您提供共同的行。
您可以使用双循环,将每个值彼此进行比较,如Lee Duhem所做的那样,但效率非常低。花费的时间增加了项目数的平方。