0

假设我有一个包含 10,000,000 行的文件 DATA。我有另一个包含 100,000 个字符串的文件 IDS。我想从 DATA 中提取所有包含 IDS 字符串之一的行。另一个条件是文件之间存在 1:1 的关系,因此每个 ID 有一行 DATA,每个 DATA 有一个 ID。

使用标准 linux 命令行实用程序执行此操作的最有效、最简单的方法是什么?

到目前为止我的想法:

  1. 构建一个巨大的正则表达式并使用 grep(简单,可能会超过 grep 中的某些限制)
  2. 逐行遍历IDS,分别为每个字符串grep DATA,合并结果。(简单,可能效率很低)
  3. 在 python 中构建 IDS 的哈希图,遍历 DATA,提取 ID 并检查哈希图(有点困难)
4

2 回答 2

3
grep -F -f IDS DATA

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

于 2013-02-27T18:59:11.563 回答
2

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

grep --file=IDS DATA > results
于 2013-02-27T18:55:08.883 回答