精确模式的grep行我有这样的脚本:在第一列
while read line; do grep $line my_annot | awk '{print $2}' ; done < foo.txt
但它不会返回我想要的。
问题是,在foo.txt中,当我有例如Contig1时,脚本将返回文件my_annot的第2列,即使发现的模式是Contig12而非仅Contig1!
我在$模式结束时尝试了$,但问题在于它对应于行尾,而我搜索的这个表达式在列1中,因此不是行尾。
我该如何判断搜索此EXACT模式,而不是那些包含此模式的模式?
#######回答:我的脚本是:
annot='/home/mu/myannot'
awk 'NR == FNR { line[$0]; next } $1 in line { print $2 }' $1 $annot > out
它可以让我放弃,我想找到的第一个参数表达的名单做./myscript.sh MYLIST
然后我将结果重定向到一个名为out的文件中。
谢谢你们!
你是否试过在'^'和'$'中包装正则表达式? – Bohemian
为什么不只是'awk'$ 1 ==“Contig1”{print $ 2}'foo.txt'而不是所有的循环和grepping? – JNevill
你不需要'grep -w'或'grep --word-regexp'吗? – Carcamano