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