2017-04-05 85 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

感謝此工作! –