2013-10-18 2 views
0

파일 작업이 같은 텍스트를 변형 된 것이다, AWK 코드를 만들 싶습니다AWK는 재치 VCF (텍스트)

  1. "## 텍스트로 시작하는 모든 열을 삭제 모든 열을 구분 는 #header "나는이 코드를

을하지만 좋지 않다"시작

  • 그리고 헤더를 유지, "

    #!/bin/bash 
    for i 
    in *.vcf; 
    do 
        awk 'BEGIN {print "CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILT\tINFO\tFORMAT"}' | 
        awk '{$1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $7 "\t" $8 "\t" $9}' $i | 
        awk '!/#/' > ${i%.vcf}.tsv; 
    done 
    

    INPUT :

    > ##fileformat=VCFv4.1 
    > ##FORMAT=<ID=GQX,Number=1,Type=Integer,Description="Minimum of {Genotype quality assuming variant position,Genotype quality assuming 
    > non-variant position}"> 
    > #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 1 chr1 10385471 rs17401966 A G 100.00 PASS DP=67;TI=NM_015074;GI=KIF1B;FC=Silent GT:GQ:AD:VF:NL:SB:GQX 0/1:100:29,38:0.5672:20:-100.0000:100 
    > chr1 17380497 rs2746462 G T 100.00 PASS DP=107;TI=NM_003000;GI=SDHB;FC=Synonymous_A6A;EXON GT:GQ:AD:VF:NL:SB:GQX 1/1:100:0,107:1.0000:20:-100.0000:100 
    > chr1 222045446 rs6691170 G T 100.00 PASS DP=99 GT:GQ:AD:VF:NL:SB:GQX 0/1:100:49,50:0.5051:20:-100.0000:100 
    

    출력 :

    for f in *.vcf; do 
        awk ' 
         BEGIN {OFS = "\t"} 
         /^##/ {next} 
         /^#/ {sub(/^#/,"",$1)} 
         {$1=$1; print} 
        ' "$f" > "${f/%vcf/tsv}" 
    done 
    

    이 프로그램은 어떤 기록을 건너 뜁니다 : 나는

    > CHROM POS ID   REF ALT QUAL FILTER INFO    etc... 
    > hr1 10385471 rs17401966 A 
    > G 100.00 PASS DP=67;TI=NM_015074;GI=KIF1B; 
    
  • +3

    샘플 입력과 원하는 출력을 게시 할 수 있습니까? – fedorqui

    +0

    내가 원하는 출력이 실제로 원하는 출력이라고 생각하지 않습니다. –

    답변

    5

    당신은 하나의 AWK 호출로 전체 프로그램을 데려 가고 싶다는 원하는 것은 ##로 시작하는 행은 해당 행의 선행 해시를 제거한 다음 탭을 사용하여 각 행을 필드 분리 문자로 인쇄합니다.

    awk 프로그램은 일련의 condition {action} 쌍입니다. 입력의 각 레코드에 대해 조건이 참이면 조치 블록이 수행되고 그렇지 않으면 무시됩니다. 조건을 생략하면 무조건 수행 블록이 수행됩니다.

    이 예제에서 까다로운 부분은 $1=$1입니다. 필드가 수정되면 awk는 출력 필드 구분 기호 (OFS 변수)를 사용하여 필드를 조인하여 레코드를 다시 빌드합니다.

    +0

    고맙습니다.이 스크립트는 우수합니다. 감사. – Vonton

    +0

    글렌 스크립트를 다른 업그레이드로 사용합니다. 문제입니까? 그렇다면 포럼에서 삭제합니다. 걱정하지 않으시 길 바랍니다. – Vonton

    +0

    나는 stackoverflow에 게시 된 코드가 암시 적으로 퍼블릭 도메인이라는 것을 확신한다. 어쨌든 그건 그렇게 보입니다. 걱정할 필요가 없습니다. –