使用与文件列表完全匹配的grep

时间:2017-04-05 21:13:49

标签: unix grep

我试图搜索文件中一组模式的完全匹配。

我试过了:

    grep -w -f IDs.txt seqs.txt > output.txt

但我错过了一些模式。

示例:

IDs.txt
denovo23
denovo28
denovo62
denovo897
denovo621
denovo622

seqs.txt
denovo23    HNS.2_9729  HNS.2_20867
denovo28    HNS.6_14948 HNS.6_148211    HNS.11_327521
denovo62    HNS.7_468475    HNS.7_631780
denovo897   WNA.2_58410 WNA.1_175071
denovo621   WNA.2_20180 WNA.2_294219
denovo622   CES.1_24310 HNS.6_26786
denovo637   HNS.2_262147
denovo586   HNS.1_332240

预期产出:

denovo23    HNS.2_9729  HNS.2_20867
denovo28    HNS.6_14948 HNS.6_148211    HNS.11_327521
denovo62    HNS.7_468475    HNS.7_631780
denovo897   WNA.2_58410 WNA.1_175071
denovo621   WNA.2_20180 WNA.2_294219
denovo622   CES.1_24310 HNS.6_26786

实际输出:

denovo23    HNS.2_9729  HNS.2_20867
denovo28    HNS.6_14948 HNS.6_148211    HNS.11_327521
denovo62    HNS.7_468475    HNS.7_631780
denovo897   WNA.2_58410 WNA.1_175071

所以我需要一种方法来对文件列表中的模式进行精确匹配。我已经看到了几种完全匹配的方法,但是没有一种方法可以使用文件中的列表 - 任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

您的grep -w -f命令在Debian Testing& Bash 4.4& GNU grep 2.27甚至在我的FreeBSD11 VM中使用Bash 4.4和BSD grep 2.5.1 我找不到你的系统有什么问题导致grep失败。

与此同时,您可以使用awk执行相同的工作(在Debian中使用gnu awk和使用非gnu awk的FreeBSD进行测试):

awk 'NR==FNR{a[$1];next}$1 in a' ids.txt seq.txt