繁体   English   中英

如何从字符串列表的文件中grep完全匹配

[英]How to grep exact matches from a file of a list of strings

我有一个文件A,其中一列包含如下字符串列表:

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 

它能够上面所有3行。 但是,我只希望前两行是grep'ed而第三行与AIP-S1不完全匹配AIP。

有人能告诉我如何修复命令吗?

谢谢。

您可以使用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

您正在使用-w进行全字搜索。 问题是在“AIP-S1”中,“ - ”字符不是单词字符。 所以“AIP” 就是一个完整的词。

这个疯狂的命令可以将模式文件转换为包含“类字边界”模式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM