对多个文件运行具有多个输入的命令

对多个文件运行具有多个输入的命令

我需要使用 2 个文件作为输入运行一个程序,期望 1 个输出包含 6000 个文件,范围从 abc0000.faa/abc0000.fna 到 abc6000.faa/abc6000.fna。我还需要输出文件与输入具有相同的文件名,但扩展名为 .paml。

这是仅针对文件 0000 的完整命令的示例。

./pal2nal.pl abc0000.faa abc0000.fna -codontable 11 -output paml > abc0000.paml

有没有办法自动对所有文件运行相同的命令?类似于“for-in-do”之类的东西?

谢谢!

答案1

您可以循环一组输入文件(.faa例如文件)并从中生成其他输入文件和输出文件名:

for f in *.faa; do
    ./pal2nal.pl "$f" "${f%.faa}.fna" -codontable 11 -output paml > "${f%.faa}.paml"
done

${f%word}语法删除最短的尾随组件匹配word

答案2

命令

seq -w 0 6000

将生成从 0 到 6000 的所有数字;如果数字少于四位,则会在左侧填充 0。您可以使用命令替换将命令包装在 for 循环中:

for n in $(seq -w 0 6000) ;do
  ./pal2nal.pl abc$n.faa abc$n.fna -codontable 11 -output paml > abc$n.paml
done

相关内容