从一个大文件到另一个大文件寻找匹配项?

从一个大文件到另一个大文件寻找匹配项?

我有两个电子邮件列表。一个是包含 10 万行的电子邮件地址的换行符分隔文件,第二个文件包含电子邮件、日期、IP 地址换行符。它有 400 万行,并且包含我不关心的重复项。

当 fileA.txt 是一个有 100 或 1000 行的测试文件时,grep -f fileA.txt fileB.txt 会起作用,但当 fileA.txt 是 100k 时,它却没有任何作用。

我也对 perl 持开放态度 :)

答案1

遇到这种情况时,如果我不想/不能将一个文件的所有内容存储在数组中(正如 Eric 所建议的那样),我会采取一种略显不寻常的方法。每个文件都导出到数据库中的单独表中(我喜欢用 Perl 来处理这一部分),然后通过 SQL 查询获取所需的结果。

答案2

-F您可以使用该选项来搜索固定字符串,从而稍微加快速度。

grep -Ff fileA.txt fileB.txt

您对测试进行计时了吗?将这个时间推算到更大的文件上,会告诉你什么?

答案3

排序然后比较它们?这应该可行。

答案4

在 perl 中:

#!/usr/bin/perl -w

my ($emailfile, $file2);

if ( open ( $emailfile, '/path/file') )
{
  my @emails = split(/\n/, $emailfile);

  if ( open ( $file1, '/path/file') )
  {
    foreach my $email ( @emails )
    {
      while ( <$file2> )
      {
        if ( $_ =~ /$email/)
          print $_;
      }
    }
  }
}

相关内容