我需要使用 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