2016-08-22 2 views
2
1  875091 G  GA  GT:AD:DP:BQ:SS:FT:DP4 0/1:.:5:.:1:VarscanHighConfidenceIndel:1,2,1,1 
1  948846 T  TA  GT:DP:DP4:BQ:SS:FT:AD 1/1:50:10,0,10,0:.:1:VarscanHighConfidenceIndel:. 

안녕하세요, 품질을 기준으로 샘플을 추출해야합니다. 샘플이 거대하고 특정 열만 표시하고 있습니다.다른 형식의 awk

열 5는 ':'으로 구분 된 열 6의 값에 대한 정보를 나타냅니다. 여기에 나와 있지 않은 컬럼 5의 다른 포맷이 있습니다.

특정 값의 샘플을 추출해야합니다. 예를 들어 다른 형식의 경우 DP> 12 및 SS = 1 및 기타 값이 필요합니다.

첫 번째 행에서 5/6 열의 세 번째 요소 인 DP는 5입니다. SS = 1 (요소 5). 2 행째

는 DP가 열 5/6의 두번째 요소이며 값이 50이고, SS = 1 (소자 5)

내가 모두 비슷한 포맷을 그룹화 하였다 한 개별 AWK했다 그들에게 명령하십시오.

gzip -dc file1.vcf.gz | grep 'GT:AD:DP:BQ:SS:FT:DP4' |awk -F "\t" 'NR>1 {split($6,a,":"); if(a[5]==1 && a[3]>12){print $0}}' 
gzip -dc file1.vcf.gz | grep 'GT:DP:DP4:BQ:SS:FT:AD' |awk -F "\t" 'NR>1 {split($6,a,":"); if(a[5]==1 && a[2]>12){print $0}}' 

내가 열 거기에 다른 많은 다른 형식으로 다른 형식의 개별 AWK를하지 않고이 할 수있는 방법을 찾고 있어요 5

+1

은 시간이 없어 완전한 답을 쓸 수는 있지만'split ($ 5, a,/: /)'를 사용하여 sp 'a'에서 찾은 값에 따라 원하는 필드와'split ($ 6, v,/: /)'를 찾고'v '로 색인을 붙입니다. –

+0

grep을 제거하고'gzip ... | '과 같이 $ 5에 대한 테스트를 추가 할 수 있습니다. awk -F "\ t" 'NR> 1 && $ 5 ~/GT : 광고 ... | GT : DP ... | ....../{split (....); ....} 행운을 빈다. – shellter

답변

3

당신은 입력이되지, 그래서 주어진 예상 출력을 제공하지 않았다 정확히 당신이 원하는하지만 이러한 종류의 문제점에 대한 가장 일반적인 방법은 먼저 값으로 필드 이름을 매핑하는 배열을 만드는 것입니다 다음 무엇을 사용 취소 당신은 적합, 예를 들어, 참조로 :

에게
$ cat tst.awk 
{ 
    split($5,n,/:/) 
    split($6,v,/:/) 
    for (i in n) { 
     f[n[i]] = v[i] 
    } 
} 
(f["DP"] > 5) && (f["SS"] == 1) 

$ awk -f tst.awk file 
1  948846 T  TA  GT:DP:DP4:BQ:SS:FT:AD 1/1:50:10,0,10,0:.:1:VarscanHighConfidenceIndel:.