2017-11-30 4 views
1

아래 awk에는 패턴 #CHROM 아래의 행만 처리하는 방법이 있지만 출력에는 모두 인쇄하십시오. 내가 가지고있는 문제는 #을 가진 모든 줄을 무시하고 출력에 인쇄하지만 #이없는 다른 줄은 중복됩니다. 내 데이터 파일에는 수천 개의 행이 있지만 아래의 oone 형식 만 awk으로 업데이트됩니다. 고맙습니다 :).awk # 기호로 시작하는 중복 된 행

파일tab-delimited

##bcftools_normVersion=1.3.1+htslib-1.3.1 
##bcftools_normCommand=norm -m-both -o genome_split.vcf genome.vcf.gz 
##bcftools_normCommand=norm -f /home/cmccabe/Desktop/NGS/picard-tools-1.140/resources/ucsc.hg19.fasta -o genome_annovar.vcf genome_split.vcf 
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 
chr1 948797 . C . 0 PASS DP=159;END=948845;MAX_DP=224;MIN_DP=95 GT:DP:MIN_DP:MAX_DP 0/0:159:95:224 

AWK

awk '!/^#/ 
BEGIN {FS = OFS = "\t" 
} 
NF == 10 { 
split($8, a, /[=;]/) 
$11 = $12 = $13 = $14 = $15 = $18 = "." 
$16 = (a[1] == "DP") ? a[2] : "DP=num_Missing" 
$17 = "homref" 
} 
1' out > ref 

curent 출력tab-delimited

##bcftools_normVersion=1.3.1+htslib-1.3.1 
##bcftools_normCommand=norm -m-both -o genome_split.vcf genome.vcf.gz 
##bcftools_normCommand=norm -f /home/cmccabe/Desktop/NGS/picard-tools-1.140/resources/ucsc.hg19.fasta -o genome_annovar.vcf genome_split.vcf 
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 
chr1 948797 . C . 0 PASS DP=159;END=948845;MAX_DP=224;MIN_DP=95 GT:DP:MIN_DP:MAX_DP 0/0:159:95:224 --- duplicated line --- 
chr1 948797 . C . 0 PASS DP=159;END=948845;MAX_DP=224;MIN_DP=95 GT:DP:MIN_DP:MAX_DP 0/0:159:95:224 . . . . . 159 homref . --- this line is correct --- 

원하는 출력은tab-delimited

##bcftools_normVersion=1.3.1+htslib-1.3.1 
##bcftools_normCommand=norm -m-both -o genome_split.vcf genome.vcf.gz 
##bcftools_normCommand=norm -f /home/cmccabe/Desktop/NGS/picard-tools-1.140/resources/ucsc.hg19.fasta -o genome_annovar.vcf genome_split.vcf 
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 
chr1 948797 . C . 0 PASS DP=159;END=948845;MAX_DP=224;MIN_DP=95 GT:DP:MIN_DP:MAX_DP 0/0:159:95:224 . . . . . 159 homref . 

답변

1

귀하의 첫 번째 문 :

/^#/ 

는 "인쇄 모든 # 시작 라인"과 마지막 말한다는 :
1 

는 모든 라인 인쇄 "라고 ". 따라서 출력의 중복 행.

!/^#/ { do stuff } 
1 
+0

그래서 어떻게'#'없이 단지 라인을 처리하지만 출력을 인쇄하는 :

#로 시작하지 않지만 인쇄 모든 라인이 될 것이다 라인을 수정하려면? '# '이없는 파일의 행을 업데이트하는 데'1 '이 필요하지 않습니까? 고맙습니다 :). – Chris

+1

답을 업데이트했습니다. –

+0

그게 효과가 있지만 패턴 # CHROM 다음에 줄을 처리하는 방법이 있습니까? 그건 그 줄만 업데이트하는거야? 대단히 감사합니다 :). – Chris