Bash,比较文件。从文件B中存在的文件A中删除值

时间:2010-07-29 05:37:24

标签: arrays bash while-loop

问候,

我有一个文件 - 或多或少是一个灰名单文件。我需要将其中的40到50个值与白名单文件进行比较 - 并从白名单文件中存在的灰名单中删除任何值。

现在我正在获取每个灰名单值并将其与白名单文件中的每个值(具有1-2000个值)进行比较,如果找到匹配项,则将其从灰名单中删除。然后循环到下一个灰名单值。

似乎非常低效 - 但我不知道从哪里开始做我正在寻找的事情。

有什么想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用grep -f

grep -F -v -f whitelist.txt greylist.txt

greylist.txt中不在whitelist.txt的值在stdout上,如果需要,可以将其重定向到文件。

grep的选项执行以下操作:

  • -F:将PATTERN解释为固定字符串列表。 (即不要使用正则表达式)
  • -v:反转匹配感,选择不匹配的行。
  • -f:从FILE获取模式,每行一个。

请参阅man grep

答案 1 :(得分:1)

你可以对这两个文件进行排序吗?这样做可以让你提前退出搜索,加快速度 - 特别是如果你可以对两者进行排序,在这种情况下你只需要遍历每个文件一次(因为你只需要在当前的任何一个文件中前进)在较低的价值)。