私は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をご覧ください。
答え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