Unix入力ファイルのデフォルト名を使用して出力を別のディレクトリに送信するディレクトリを繰り返す方法

Unix入力ファイルのデフォルト名を使用して出力を別のディレクトリに送信するディレクトリを繰り返す方法

私はUNIXを頻繁に使用しないユーザーであり、これが一般ユーザーにとっては非常にマイナーなものであると確信していますのでお詫び申し上げます。次のコードがあります。

 for file in /home/sub1/samples/aaa*/*_novoalign.bam
      do
           samtools depth -r chr9:218026635-21994999 *_novoalign.bam < $file > /home/sub2/sub3/${file}.out 
      done

入力フォルダと同じ名前のsub2 / sub3 /ファイルに出力を送信したいと思います。 「ファイルやディレクトリはありません」と表示されます。理想的にはここに送りたいです。 「_novoalign.bam」を削除し、「_output.txt」などの新しいエンディングを追加します。どのようなヒントがありますか?

ps入力ファイルがあるディレクトリに書き込む権限がありません。

答え1

パスを削除してから、不要な拡張子を削除する必要があります。

base=${file##*/}
newfile=${base%_novoalign.bam}_output.txt

次に、次を使用します。

... > "/home/sub2/sub3/$newfile"

その他のオプションについては、Shell Parameter Expansionをご覧ください。

GNU バッシュ文書

答え2

cd /home/sub1/samples
for file in aaa*/*_novoalign.bam; do
    target_file="${file%_novoalign.bam}_output.txt"
    samtools depth -r chr9:218026635-21994999 <"$file" >"$target_file"
done

関連情報