1

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

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

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

数组 = (100, 0)

比较第 2 列(而不是第 10 列),输出应该是,

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

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

寻找更智能/更快的方法来做到这一点。

4

1 回答 1

2

将被测试的值作为关联数组的键。然后,当您想测试第 10 列时,需要进行一次数组查找来查看该键是否存在。

这个简单的更改应该使您的脚本更快。

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

于 2013-11-12T04:42:18.010 回答