2014-02-27 15 views
4

我有一列文件的,像這樣的字符串列表清單的文件用grep精確匹配:如何從字符串

ADAMTS9 
AIP 
.... 

我想使用的字符串文件A到grep包含這些文件B和文件B線看起來是這樣的:

chr13 50571142  50592603  ADAMTS9 21461 + 
chr19 50180408  50191707  AIP 11299 + 
chr19 50180408  50193000  AIP-S1 6532 - 

我用:

grep -F -i -w -f A B 

,它是能夠與G代表上面的所有3行。但是,我只希望前兩行被grep'ed與AIP-S1第三行是不是與AIP完全匹配..

有人能告訴我如何解決這個命令來做到這一點?

謝謝。

回答

3

您可以用awk來代替:

awk 'FNR==NR{a[$1];next} ($4 in a)' A B 
chr13 50571142  50592603  ADAMTS9 21461 + 
chr19 50180408  50191707  AIP 11299 + 

或以任何字段搜索:

awk 'FNR==NR{a[$1];next} {for (i=1; i<=NF; i++) if ($i in a) print}' A B 
+1

這是酷! – olala

2

您正在使用-w做整個單詞搜索。麻煩的是,在「AIP-S1」中,「 - 」字符是而不是的一個字符。所以「AIP」作爲一個單詞發現。

這個瘋狂的命令工程改造模式文件,包括「字邊界樣」模式:

$ grep -if <(sed 's/^/\\(^\\|[[:space:]]\\)/; s/$/\\($\\|[[:space:]]\\)/' A) B 
chr13 50571142  50592603  ADAMTS9 21461 + 
chr19 50180408  50191707  AIP 11299 + 
+1

是的,這是一個瘋狂的命令... – olala