text - 使用大量替换对在文本文件中执行大量替换

标签 text sed large-files replace

鉴于:

  • 文件 a.txt包含数百万行(比如每行一个句子)(2.6 GB!
  • 文件 b.txt包含 830k 行对 [word1] [word2]

  • 题:

    如何对巨大的文本文件中的每个 830k 元组 (w1, w2) 执行每个 word1 由 word2 最有效的替换?

    像 sed、perl、python 等简单的方法需要数周才能完成。是否有(可能是基于并行化的)方法来执行替换负载?

    最佳答案

    我会用 python 来做,但如果算法正确,任何其他语言都可以完成这项工作。
    整个技巧是将单词对(文件 b.txt)保存在内存中,并一次性遍历大文件。由于 I/O 操作比从 RAM 读取慢得多,因此这种方法的性能将是 O(file1) + O(file2)

    在伪代码中:

    myMap = {}
    for line in fileB:
      myMap[1st word of line] = 2nd word of line
    
    for line in fileA
      for word in line
        if myMap contains word
          replace word with myMap[word]
    

    我想这是你能得到的最快的速度。

    关于text - 使用大量替换对在文本文件中执行大量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752461/

    相关文章:

    javascript - 访问存储在 GitHub LFS 中的静态 .obj 文件

    c# - 使用 ASP.Net Webapi 流式传输大图像

    json - 如何使用 BASH 从 JSON 中提取特定文本

    linux - 根据行号排除/忽略(不删除)第一行和最后一行

    algorithm - 寻找文本差异的算法来检测并可以对相似的行进行分组

    c# - 如何在 C# 中的一个循环中重命名多个按钮

    bash - SED:在范围末尾追加一行

    c# - 将大文件写入磁盘内存不足异常

    java - 当语言被覆盖时搜索停用词无法按预期工作

    python - 试图打开一个文本文件并创建一个分隔句子的行列表。