我试图遍历特定目录(名为sequences)中的每个文件,并对每个文件执行两个函数。我知道这些函数('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"。
如果需要澄清任何信息,请告诉我。