2017-04-05 83 views
0

我正试图搜索文件中一组模式的完全匹配。使用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 

所以我需要一种方法来做到在列表中进行图案的精确匹配一份文件。我已经看到了几种方法来完成匹配,但没有一个与文件中的列表一起工作 - 任何帮助将不胜感激。

+0

工作正常,在我的Debian&Bash的4.4与GNU grep的2.27 - 你是什​​么bash/grep版本和你的操作系统? –

+0

我在Mac OS 10.11上使用Bash 3.2.57和BSD grep 2.5.1。谢谢! –

+0

我也得到了预期的输出(Ubuntu 12.04中的bash 4.2.25和grep 2.10)。也许你真的有太旧的工具在你的输入中绊倒了某些东西。例如,检查IDs.txt中的尾部空格。 – Alfe

回答

0

grep -w -f命令工作正常,无论是在我的Debian测试&猛砸4.4 & GNU的grep 2.27,甚至在我FreeBSD11 VM使用bash 4.4和BSD grep的2.5.1。
我找不到你的系统有什么问题导致grep失败。

在此期间,你可以做AWK同样的工作(在Debian测试与GNU AWK和FreeBSD与非GNU AWK):

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

感谢此工作! –