微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我试图遍历特定目录(称为序列)中的每个文件,并对每个文件执行两个功能.我知道这些功能(“ 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;
    做

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐