2017-12-31 199 views
0

파일 1과 파일 2의 두 파일에서 samtools을 사용하여 더미 파일을 만들려고합니다. $ {C}은 1과 22, 그리고 $ 조직 사이의 수이다 BASH 다른 파일의 한 열에서 파이프 된 값을 사용하여 반복적으로 더미 파일 만들기

chr${c}.${TISSUE}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 

어느 콜론

이다

는 I의 형식은 다음 이름 (44 개)의 파일을 갖는 결과, 염색체로에 File1하고있는 File2을 분할 한 또는 근육 - 결장에 22 염색체, 근육에 22 염색체. 나.; chr1.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY는

. 
. 
. 

chr22.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
chr1.muscle_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
. 
. 
. 

이러한 파일은 두 열의 구성은 제는 염색체 수를 나타내고, 두번째 컬럼은 그 염색체상의 위치. 나.; (예를 들어, "chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY") 파일의 각 행 I가 위치를 취할 필요 열 2에서, 'X'를 호출하고 a-b의 범위를 얻기 위해이를 사용하기위한

head chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
chr2 103977 
chr2 112051 
chr2 126199 
chr2 146288 
chr2 147797 
chr2 147822 
chr2 148548 
chr2 148525 
chr2 158189 
chr2 158188 

여기서 a=x-5b=x+5. 나는 다음 스크립트에 그 값을 연결합니다 :

samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:a-b 

예를 들어, 내가 염색체 2, 위치 103977 (위의 1 행)에서 찾고 있어요 같아요. 그렇다면 내 스크립트는

samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr2:103972-103982 

입니다. 따라서 기본적으로 루프 내의 루프 내에있는 루프입니다. 예 :

for t in $(colon, muscle) 
do 
    for c in $seq (1 22) 
    do 
    for item (or maybe row?) in 
     chr${c}.${t}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
    do 
     awk '{print $2}' | something something something 
     x= position in col 2, a=x-5 b=x+5 
     samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:a-b 
    done 
    done 
done 
... 

미리 감사드립니다. 나는 리눅스 작업에있어서 ​​아주 새로운데 컴퓨터 과학 교육은 본질적으로 없다.

+2

안녕하세요. 가독성을 위해 글쓰기 에디터에서 코드 (중괄호)를 수정하고 사용하십시오. 질문을 읽을 수 없습니다. 정리하십시오. 다른 질문을 통해 적절한 질문을 작성하는 방법을 배우는 것이 좋습니다. GL : – Blacky

답변

1

awk는 한 번에 한 줄을 처리하는, 그래서 다른 말로

for t in colon muscle; do 
    for c in $(seq 1 22); do 
     awk '{ print $2-5 "-" $2+5 }' chr${c}.${t}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY | 
     while read -r range; do 
      samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:$range 
     done 
    done 
done 

처럼 뭔가를 가고 싶어, awk는 전체 파일을 처리하고 최종 while read -r range 루프를 한 번에 하나의 행으로 된 출력을 공급한다 .

처음에이 파일들을 어떻게 분할했는지 또는 파일 단위가 무엇인지 이해할 수 없지만 대신 File1File2에 직접 작업 한 경우 상당히 간단해질 수 있습니다.

아마도 외부 루프를 피하고 모든 *_ONLY 파일에서 Awk를 실행하면됩니다. Awk의 내부 변수 FILENAME에서 현재 파일 이름을 가져올 수 있지만이 경우 첫 번째 필드 만 사용할 수 있습니다. 직접 $1을 사용할 수없는 경우

awk '{ print $1 ":" $2-5 "-" $2+5 }' *_ONLY | 
while read -r chrrange; do 
    samtools mpileup -f [REFERENCE GENOME] File1 File2 -r "$chrrange" 
done 

, split(FILENAME, f, /\./)을 시도하고 파일 이름에서 염색체 식별자 부분을 얻을 수 f[1]를 인쇄 할 수 있습니다.

0

이 나를 위해 일하게 끝난 것입니다 :

module load SAMtools 

awk '{print $1, $2-5 "-" $2+5}' FILE PATH |\ 
while read chrom range 
do 

    samtools mpileup -f /REFERENCE GENOME\ 
      /${chrom}.COLON BAM FILE\ 
      /${chrom}.MUSCLE BAM FILE\ 
      -r $chrom:$range -o ${chrom}.colon.${range}.pileup 

done

여러분의 도움에 감사드립니다!