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 )" )"

마지막 두 예에서는 나중에 리디렉션에 대신 "$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

관련 정보