我有两个电子邮件列表。一个是包含 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 $_;
}
}
}
}