在非常大的文件中从字符串数组中查找值的最佳方法

时间:2013-11-12 04:32:47

标签: arrays perl filter large-files

我有一个非常大的文本文件,其中包含大约200M制表符分隔的记录。我需要过滤这个文件(并且更喜欢它),并将文件中的第10列与包含大约2000个元素的字符串数组相匹配。所需的输出只是那些包含第10个字段中数组之一的值的行。

示例:假设该文件包含以下记录(以csv为例),

10, 100, 30
20, 100, 10
20, 20, 20
10, 100, 20
10, 0, 100

数组=(100,0)

比较第二列(例如,而不是第10列),输出应为

10, 100, 30
20, 100, 10
10, 100, 20
10, 0, 100

我尝试编写一个简单的perl脚本来逐行读取文件,按选项卡分割并在数组中运行for循环,以将第10列与数组中的每个元素进行比较。这需要非常长的时间。

寻找更智能/更快捷的方法。

1 个答案:

答案 0 :(得分:2)

将要测试的值作为键放到关联数组中。然后,当您要测试第10列时,需要单个数组查找以查看该键是否存在。

这个简单的改变应该让你的脚本更快。

这样的程序应该主要受I / O限制(受限于您从文件中读取字符串的速度,而不是您可以处理字符串的速度)。如果您在此更改后仍有效率问题,则应显示您的代码并邀请进一步讨论。