次のように、フォルダ内のすべてのファイルに対してスクリプトを実行したいと思います。
sh script.sh *.fasta > output
しかし、各入力の出力が別々のファイルにあることを望みます。もしそうなら、コマンドを介して5つのファイルをインポートして「output」というファイルにすべて入れるのではなく、出力をファイル名にし、最後に「_output」などのサフィックスを追加する方法はありますか?
したがって、次の3つのファイルがある場合:
file1.fasta
file2.fasta
file3.fasta
次のコマンドを実行する方法はありますか?
sh script.sh *.fasta
そして、各入力に対して次のような新しいファイルを出力します。
file1_new.fasta
file2_new.fasta
file3_new.fasta
私は次のコマンドを試しました。
sh script.sh *.fasta > *_output.fasta
しかし、うまくいきません。興味のあるすべてのファイルをこのような変数に割り当てようとしました。まず、変数に割り当てると何とか出力名を変更できると思いました。
allthefiles= *.fasta
しかし、それも動作しません。この質問を何と呼ぶべきかわかりません。既に質問されたらすみません!コマンドを介して複数のファイルを実行し、各入力に新しい出力を提供する方法は?
ベストアンサー1
for f in *.fasta; do
sh script.sh "$f" > "${f%.*}_output.fasta";
done
# ${f%.*} strips a shortest match of `.*` from the end of "$f"
# (= strips .fasta)