Linux学习

学习Linux的循环: 批量blast

2021-11-30  本文已影响0人  小明在做游戏

最常用的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
上一篇 下一篇

猜你喜欢

热点阅读