我试图遍历特定目录(称为序列)中的每个文件,并对每个文件执行两个函数。我知道函数('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/