Shell-Script

為多個文件執行具有多個輸入的命令

  • July 2, 2017

我需要執行一個程序,使用 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

有沒有辦法自動為所有文件執行相同的命令?像在做的事情?

謝謝!

您可以遍歷一組輸入文件(.faa例如文件)並從中生成其他輸入文件和輸出文件名:

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

${f%word}語法刪除了匹配的最短尾隨組件word

命令

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

引用自:https://unix.stackexchange.com/questions/374691