其他分享
首页 > 其他分享> > 在目录中遍历文件,创建输出文件

在目录中遍历文件,创建输出文件

作者:互联网

我试图遍历特定目录(称为序列)中的每个文件,并对每个文件执行两个功能.我知道这些功能(“ blastp”和“ cat”行)可以工作,因为我可以在单个文件上运行它们.通常,我将使用特定的文件名作为查询,输出等,但是我试图使用变量,以便循环可以处理许多文件.

(免责声明:我是编码的新手.)我认为尝试在函数中使用文件名遇到了严重的问题.照原样,我的代码将执行,但是会创建很多额外的意外文件.这是我打算让脚本执行的操作:

第1行:遍历“序列”目录中的每个文件. (如果有帮助,所有这些都以“ .fa”结尾.)

第3行:将文件名识别为变量. (我知道,我知道,我认为我做错了.)

第4行:使用文件名作为“ query”标志的参数运行blastp函数,始终使用“ database.faa”作为“ db”标志的参数,并将结果输出到具有与初始文件同名,但末尾带有“ .txt”.

第5行:将输出文件的部分从第4行输出到新文件中,该文件的名称与初始文件的名称相同,但末尾带有“ _top_hits.txt”.

for sequence in ./sequences/{.,}*;
    do
            echo "$sequence";
            blastp -query $sequence -db database.faa -out ${sequence}.txt -evalue 1e-10 -outfmt 7
            cat ${sequence}.txt | awk '/hits found/{getline;print}' | grep -v "#">${sequence}_top_hits.txt
    done

当我运行此代码时,它给了我六个新文件,这些文件从目录中的每个文件派生而来(它们都在同一目录中-我希望将它们全部放在自己的文件夹中.该怎么做?).他们都是空的.它们的后缀是“ .txt”,“.txt.txt”,“.txt_top_hits.txt”,“ _ top_hits.txt”,“ _ top_hits.txt.txt”和“ _top_hits.txt_top_hits.txt”.

如果我可以提供任何进一步的信息来澄清任何事情,请告诉我.

解决方法:

如果您只对* .fa文件感兴趣,我将把您的输入限制为仅那些匹配的文件,如下所示:

用于序列中的序列/*.fa;
    做

标签:bash,loops,bioinformatics,blast,linux
来源: https://codeday.me/bug/20191112/2024073.html