【问题标题】:Best way to find a value from array of string in a really large file从非常大的文件中的字符串数组中查找值的最佳方法
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 很有道理,试过了,肯定执行得更快。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-11-29
  • 2015-03-23
  • 1970-01-01
  • 2019-07-16
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多