【发布时间】:2013-11-12 13:36:56
【问题描述】:
我有一个非常大的文本文件,其中包含大约 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 列与数组中的每个元素进行比较。这需要非常长的时间。
寻找更智能/更快的方法来做到这一点。
【问题讨论】:
-
你不说有多少列,但考虑使用
split的LIMIT参数。例如,如果您有my @items = split /\t/, $line, 11;,那么第 10 列的值将在$items[9]中。
标签: arrays perl filter large-files