複数のファイルに対してコマンドを実行し、各出力に一意の名前を付けます。

複数のファイルに対してコマンドを実行し、各出力に一意の名前を付けます。

次のように、フォルダ内のすべてのファイルに対してスクリプトを実行したいと思います。

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)

おすすめ記事