samtools / sedはbamファイルを編集するために使用されます。

samtools / sedはbamファイルを編集するために使用されます。

染色体名を変更するには、次の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:XXSN:chrX\( ... \)( ... )-Esedsedsed

おすすめ記事