Linux:比较大文件

标签 linux database perl large-files

我每天都在下载 .COM 区域文件。它是世界上所有 .COM 域及其主要名称服务器的列表。

区域文件示例:

DAYTONOHIOJOBS NS NS1.HOSTINGNET
DAYTONOHIOJOBS NS NS2.HOSTINGNET
DAYTONOHIOMAP NS NS1.HOSTINGNET
DAYTONOHIOMAP NS NS2.HOSTINGNET
DAYTONOHIONEWS NS NS1.HOSTINGNET
DAYTONOHIONEWS NS NS2.HOSTINGNET

为了节省磁盘空间,您可以看到 .COM 已从域名中删除(反正都是 .COM)。 名称服务器也是如此(如果它以 .COM 结尾,则它已被删除)。

这个区域文件大约有 270,000,000 行,大约 9 GB。

我的目标是监控特定的名称服务器。每天我都想要一个包含该特定名称服务器的所有域的列表,还需要一个包含该名称服务器的所有新域的列表(新的如:昨天这个域还没有那个名称服务器)。

我写了一个 perl 脚本来打开和加载“昨天”数据库,然后打开“今天”数据库并循环比较。但这需要数小时和大量内存。

执行此操作的最佳方法是什么?

最佳答案

根据我所知道的,我会这样做:

让脚本读取第一个文件。对于与感兴趣的名称服务器对应的每一行,将条目添加到 HashMap 中。

让脚本读取第二个文件。对于与感兴趣的名称服务器对应的每一行,检查该条目是否在 HashMap 中。如果不是,那就是新的。如果是,则它没有改变 - 从 HashMap 中删除它。

最后, HashMap 中仍保留的所有条目都已被删除。

这确实假设具有此特定名称服务器域的 HashMap 适合内存,但在合理的机器上和合理的名称服务器上,这似乎是一个合理的假设......

关于Linux:比较大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672253/

相关文章:

database - Symfony2 没有创建供应商表

database - 许多日志文件的存储

perl - 新方法何去何从?

linux - getopt 命令部分解析

C++ 应用程序崩溃

java - 用 Java/C++ 处理 Linux 网络连接?

sql - INSERT 语句上的 "Not a valid month"

linux - ssh + ssh 卡在远程计算机上

arrays - 在 perl 中使用 [] 定义时无法比较数组

perl - http::proxy 模块引擎