美文网首页Linux学习
学习Linux的循环: 批量blast

学习Linux的循环: 批量blast

作者: 小明在做游戏 | 来源:发表于2021-11-30 17:32 被阅读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
    

    相关文章

      网友评论

        本文标题:学习Linux的循环: 批量blast

        本文链接:https://www.haomeiwen.com/subject/ftbdxrtx.html