最常用的Linux循环应该是for和while,记录两个直接输入command的实例(输出Ta开头的所有文件名字):
for i in Ta*;do echo $i;done
ls Ta* | while read id;do echo $id;done
开始正片:使用同一个query批量blast文件夹下所有的".fa"文件。
使用一个shell脚本,可以用vim创建,也可以使用vscode等记事本软件来写。
# 遍历所有的fa文件
for i in *.fa;
do
# 输出正在执行的fa的名字
echo $i
# 构建blast database,“> $i.log 2>&1”: 把输出到terminal的内容保存到log文件
makeblastdb -in $i -dbtype prot -out $i.db > $i.log 2>&1
# 进行blast
blastp -query OsBGL.seq -db $i.db -out $i.BGL.blast -outfmt 6 -evalue 1e-10 -num_threads 3 > $i.blast.log 2>&1
done
平时一条一条blast的时候,习惯在命令后加&,挂到后台,这里不能带&,特别是makeblastdb的时候,因为挂到后台立刻执行blast,是没有database可以用的。
然后想取所有blast结果的前3行,并整合到一个文件
# 创建空文件
touch blast_top3.txt
# 遍历所有的blast文件
for i in *.blast;
do
# 输出正在执行的fa的名字
echo $i
# head取前3行
head -3 $i >> top3.blast
done
网友评论