linux - 遍历目录中的文件,创建输出文件,linux

标签 linux bash loops bioinformatics blast

我试图遍历特定目录(称为序列)中的每个文件,并对每个文件执行两个函数。我知道函数('blastp' 和 'cat' 行)有效,因为我可以在单个文件上运行它们。通常我会有一个特定的文件名作为查询、输出等,但我正在尝试使用一个变量,以便循环可以处理许多文件。

(免责声明:我是编码新手。)我相信我在尝试在我的函数中使用我的文件名时遇到了严重的问题。事实上,我的代码将执行,但它会创建一堆额外的意外文件。这就是我打算让我的脚本执行的操作:

第 1 行:遍历“sequences”目录中的每个文件。 (如果有帮助,所有这些都以“.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 文件感兴趣,我会将您的输入限制为仅那些匹配的文件,如下所示:

for sequence in sequences/*.fa; 做

关于linux - 遍历目录中的文件,创建输出文件,linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755460/

相关文章:

Java Can't connect to X11 window server using 'localhost:10.0' as the value of DISPLAY variable

linux - 如何跟踪文件中模式的倒数第二个出现

bash - Sed:在变量中间添加子字符串

bash - 在 shell 脚本之间共享变量

python - 从Linux服务器将.txt重写为.pdf代码,以在Windows Enterprise 2008服务器上工作

javascript - 如何检查循环启动的功能何时完成?

c - 使用 C 语言动态数组与普通数组查找 Kaprekar 常数

linux - 是否有适用于 Linux 的命令行 TMX 编辑工具(多语言支持)?

linux - 如何使用 Odin 解压、修改、打包和刷写 `system.img.ext4` 文件?

r - 向量的相邻元素之间的差异