Bash 中的 For 循环

Bash 中的 For 循环

我正在运行生物信息学工具 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.dband 的文件,则在第一个循环中它将创建输出and在第二个循环中。database2.dbFirst10testdatabase1.db.txttestdatabase2.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 上获得已处理的文件名,并在每次迭代时更改其名称。

相关内容