我对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