染色体名を変更するには、次のsedコマンドがあります。
for file in /myoldpath/*.bam; do
filename=echo $file | cut -d "." -f 1
samtools view -H $file | sed -e 's/SN:([0-9XY])/SN:chr\1/' -e 's/SN:MT/SN:chrM/' | \
samtools reheader - $file > /mynewpath/${filename}_chr.bam
done
私の質問は、変数を$filename
各新しいファイル名の一部として保持しながら、結果を新しいパスに挿入する方法です。常に結果を挿入してください。/myoldpath/
この部分の構文から何か抜けましたか?filename.chr.bam
/mynewpath/
$file > /mynewpath/${filename}_chr.bam
ベストアンサー1
filename
変数に割り当てるときは、basename
次のようにユーティリティを使用できます。
filename="$( basename "$file" .bam )"
たとえば、次の場合、filename
値が提供されますmyfile
(つまり、指定されたサフィックスとともにすべてのパス要素が削除されます)。$file
/my/data/myfile.bam
使用することもできます
filename="/mynewpath/$( basename "$file" .bam )_chr.bam"
または
filename="$( printf '/mynewpath/%s_chr.bam' "$( basename "$file" .bam )" )"
最後の2つの例では、後でリダイレクトに代わりに"$filename"
使用します。"/mynewpath/${filename}_chr.bam"
についてsed
:
sed -e 's/SN:([0-9XY])/SN:chr\1/' -e 's/SN:MT/SN:chrM/'
これにより、染色体名のある場所chr
に文字列が挿入され、に変換されます。ただし、キャプチャグループの代わりに使用するか、 's'コマンド呼び出しにオプションを追加する必要があります。それ以外の場合は「s」エラーが発生します。 RHSコマンド\ 1への参照が無効です。」(GNUを使用)または「\ 1がRE(BSDを使用)に定義されていません。SN:X
X
SN:chrX
\( ... \)
( ... )
-E
sed
sed
sed