如何在Perl中搜索大型排序文件?

est*_*est 1 perl

您能否建议我使用任何CPAN模块来搜索大型文件?

该文件是一个大约1500万到2000万行的结构化数据,但我只需要找到大约25,000个匹配的条目,所以我不想将整个文件加载到哈希中.

谢谢.

dav*_*ave 6

Perl非常适合这样做,无需外部模块(来自CPAN或其他地方).

一些代码:

while (<STDIN>) {
    if (/regular expression/) {
         process each matched line
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要提出自己的正则表达式来指定要在文件中匹配的行.匹配后,您需要自己的代码来处理每个匹配的行.

将上面的代码放在脚本文件中,并将文件重定向到stdin.


jro*_*way 5

扫描整个文件可能是最快的方法.您还可以尝试File :: Sorted,它将对给定记录进行二进制搜索.在2500万行文件中找到一条记录应该要求每条记录大约15-20次搜索.这意味着要搜索25,000条记录,您只需要大约0.5百万次搜索/比较,相比之下,25,000,000条记录可以通过天真的方式检查每一行.

磁盘IO就是这样,你可能想先尝试一下简单的方法,但File :: Sorted是理论上的胜利.