Linux 从文件中提取包含大量字符串之一的行

Linux 从文件中提取包含大量字符串之一的行,linux,command-line,Linux,Command Line,假设我有一个10000000行的文件数据。我还有一个文件ID,有100000个字符串。我想从包含IDS字符串之一的数据中提取所有行。另外一个条件是文件之间存在1:1的关系,因此每个ID都有一行数据,每个数据都有一个ID 使用标准linux命令行实用程序实现这一点最有效、最简单的方法是什么 到目前为止,我的想法是: 构建一个巨大的正则表达式并使用grep(很简单,可能超出grep的某些限制) 逐行检查每个字符串的IDS和grep数据,合并结果。(简单,可能效率很低) 在python中构建ID的哈希

假设我有一个10000000行的文件数据。我还有一个文件ID,有100000个字符串。我想从包含IDS字符串之一的数据中提取所有行。另外一个条件是文件之间存在1:1的关系,因此每个ID都有一行数据,每个数据都有一个ID

使用标准linux命令行实用程序实现这一点最有效、最简单的方法是什么

到目前为止,我的想法是:

  • 构建一个巨大的正则表达式并使用grep(很简单,可能超出grep的某些限制)
  • 逐行检查每个字符串的IDS和grep数据,合并结果。(简单,可能效率很低)
  • 在python中构建ID的哈希映射,循环数据,提取ID并对照哈希映射进行检查(稍微难一点)

  • 如果IDS包含您需要在数据中找到的确切字符串(每行一个字符串),请尝试使用

    grep --file=IDS DATA > results
    

    如果IDS包含您需要在数据中找到的确切字符串(每行一个字符串),请尝试使用

    grep --file=IDS DATA > results
    
    不要错过
    -F
    :它防止将ID解释为正则表达式,并支持更高效的Aho Korasick算法


    不要错过
    -F
    :它防止将ID解释为正则表达式,并启用更高效的Aho Korasick算法。

    4<代码>人工加入5。使用真正的数据库我现在正试图使用
    join
    (这正是我所需要的),但我在整理数据时遇到了一些麻烦:4<代码>人工加入5。使用真正的数据库我现在正试图使用
    join
    (这正是我所需要的),但我在整理数据时遇到了一些问题: