Impty grep result in loop



我对shell脚本很陌生,所以这可能很容易回答

我在一个程序中鉴定了一些间歇基因,输出的是数据文件利息.txt

Nrg3
Srebf1
Cacna2d3
LOC100759725
LOC100761135
LOC100771217
LOC100769029

我有另一个数据文件 (unique_saml),其中包含大多数这些名称以及其他信息例如

Nrg3    neuregulin_3    XM_003503005.1

所以我想编写一个脚本,它可以获取我的结果并从我的数据文件中 grep 其余数据

"#!/bin/sh
for ((  i = 0 ;  i <= 7; i++  ))
do  
cat interest.txt | head -$i | tail -1 | gawk '{print $1}' > tempname
name=`awk '{print $1 }' < tempname`
grep `echo $name` unique_saml >> results.txt
done

但是程序停止并且永远不会结束,因为在unique_saml文件中找不到i = 4 = LOC100759725 = grep 返回空。

如何避免这种情况?

grep可以使用-f从文件中读取模式:

$ grep -f interest.txt unique_saml
Nrg3    neuregulin_3    XM_003503005.1

如果您希望 interest.txt 中的值仅与unique_saml中的第一列匹配:

$ sed 's/^/^/' interest.txt | grep -f - unique_saml
Nrg3    neuregulin_3    XM_003503005.1

如果要循环访问文件interest.txt并添加更多信息(如果可用),则可以执行以下操作:

cat interest.txt | while read line
do
   echo -e "$linet`grep $line unique_saml | awk '{print $2 "t" $3}'`"
done

最新更新