如何从两个文本文件中获取互补线?
档案file1.txt
已
123 foo
234 bar
...
档案file2.txt
已
123 foo
333 foobar
234 bar
...
我希望获得file1.txt
中的所有行,而不是file2.txt
中的所有行。这两个文件大小为数百MB,包含非ASCII字符。什么是快速的方法呢?
答案 0 :(得分:2)
为了获得大文件的良好性能,请不要将大部分文件读入内存;尽可能地使用磁盘上的内容。
可以使用散列有效地完成字符串匹配。
一个策略:
djb2
就是一个例子,但有许多例子。答案 1 :(得分:1)
“数百MB”并非如此。
我会这样解决这个问题(在Perl中):
$ cat complementary.pl
my %f;
open(F, "$ARGV[1]") or die "Can't open file2: $ARGV[1]\n";
$f[$_] = 1 while(<F>);
close(F);
open(F, "$ARGV[0]") or die "Can't open file1: $ARGV[0]\n";
while(<F>) {
print if not defined $f[$_];
}
使用示例:
$ cat file1.txt
100 a
200 b
300 c
$ cat file2.txt
200 b
100 a
400 d
$ perl complementary.pl file1.txt file2.txt
300 c
答案 2 :(得分:1)
行,特别是?
fgrep -vxf file2.txt file1.txt