samtools / sed para edição do arquivo bam

1

Eu tenho o seguinte comando sed que altera o nome do cromossomo:

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/' -e 's/SN:MT/SN:chrM/' | \
  samtools reheader - $file > /mynewpath/${filename}_chr.bam
done

Minha pergunta é como inserir o resultado em um novo caminho, mantendo a variável $filename como parte de todo novo nome de arquivo? Sempre insere o resultado em /myoldpath/ ou literalmente filename.chr.bam no /mynewpath/  estou faltando alguma coisa na sintaxe dessa parte $file > /mynewpath/${filename}_chr.bam ?

    
por Alexis_543 06.01.2017 / 11:12

1 resposta

0

Ao atribuir à variável filename , você pode usar o utilitário basename da seguinte forma:

filename="$( basename "$file" .bam )"

Isso dará filename o valor myfile if $file , por exemplo, /my/data/myfile.bam (ou seja, removerá qualquer elemento do caminho, bem como o sufixo especificado).

Você pode até usar

filename="/mynewpath/$( basename "$file" .bam )_chr.bam"

ou

filename="$( printf '/mynewpath/%s_chr.bam' "$( basename "$file" .bam )" )"

Com os dois últimos exemplos, você usaria mais tarde "$filename" em vez de "/mynewpath/${filename}_chr.bam" para o redirecionamento.

Quanto ao sed :

sed -e 's/SN:([0-9XY])/SN:chr/' -e 's/SN:MT/SN:chrM/'

Isso inserirá a string chr em SN:X onde X é um nome de cromossomo, transformando-o em SN:chrX . No entanto, você precisará usar \( ... \) em vez de ( ... ) para o grupo de captura ou adicionar a opção -E à invocação de sed , ou você receberá um erro dizendo "referência inválida \ 1 em" s 'comando's RHS "(com GNU sed ) ou" \ 1 não definido no RE "(com BSD sed ).

    
por 06.01.2017 / 11:38