我正在运行生物信息学工具 hmmer,我想运行它来进行 7000 多个测试序列查询。在它运行每一个之后,我希望它将输出保存在一个文本文件中,这很容易做到。
我正在尝试在 bash 中创建一个 for 循环,该循环将在文件夹中的每个测试序列上运行 hmmer 并将输出写入其自己的文本文件。
如何在 for 循环内编写一条语句,以便每次执行循环时写入不同的文本文件?
目前我的代码是这样的
for i in First10/*; do
binaries/jackhmmer --tblout test[i].txt -E1 --noali $i largedatabase.fasta
done
答案1
for i in First10/*; do
binaries/jackhmmer --tblout test$(basename $i).txt -E1 --noali $i largedatabase.fasta
done
我不确定您在循环中运行的命令。但我想我的回答可以满足你的要求。
它将在每个循环中创建新的输出文件。 **即:如果目录中有两个名为database1.db
and 的文件,则在第一个循环中它将创建输出and在第二个循环中。database2.db
First10
testdatabase1.db.txt
testdatabase2.db.txt
答案2
#!/bin/bash
cd First10
for filename in *; do
../binaries/jackhmmer --tblout "${filename}.log" -E1 --noali "$filename" largedatabase.fasta
done
cd $OLDPWD
因此,您将在日志文件名 dot log 上获得已处理的文件名,并在每次迭代时更改其名称。