我需要解析一个大文件(超过 500 MB)并获得唯一的行。事实上,我需要第一次出现独特的线条。
当我的 RAM 有限时,您能否建议有效的方法来完成这项工作?
使用哈希。它们是重复数据删除的典型方法:
my %data;
while (<$fh>) {
.... # other code
$data{$key} //= $value;
}
定义或赋值//=
运算符等价于:
if (not defined $data{$key}) {
$data{$key} = $value;
}
这意味着仅保存此键的第一个值。
请注意,使用哈希的重复数据删除仅适用于完全相同的字符串。
使用哈希来跟踪您已经看到的行。
my %seen;
while (<$fh>) {
next if $seen{$_}++; # duplicate
...
}