使用ruby脚本从大文件中删除几行

时间:2012-02-09 14:57:08

标签: ruby file file-manipulation

File 1: 1356775 lines
File 2: 9516 lines

文件2包含在文件1中匹配时应从该文件中删除的数字行。 例如:

档案1

34234323432 some useless stuff
23423432342 more useless stuff
98989898329 foo bar blah
65367389473 one two three

文件2

234234323
653673894

新文件

34234323432 some useless stuff
98989898329 foo bar blah

我现在的方法是

  1. 将整个file2内容读入数组
  2. 获取File1的第一行并提取前8个数字
  3. 从步骤1循环遍历整个数组,以查看step1中的8个数字是否匹配
  4. 如果数字不匹配,则将第1步中的行写入新文件
  5. 如果匹配则跳出循环并且不将该行写入新文件
  6. 继续,直到没有更多行从第2步读取
  7. 但是,由于文件太大,因此需要花费大量时间才能执行此操作,因为对于file1中的每一行,我们循环遍历整个数组(9516个元素)。是否有更简单的方法来执行此类文件操作,而无需将文件中的记录放入数据库表中。

2 个答案:

答案 0 :(得分:1)

在哈希中读取file2,其中数字为键,值为“true”。哈希旨在快速查找 - much faster then arrays

答案 1 :(得分:0)

你可以将File1块读入内存,避免大量阻塞IO。