2017-11-30 10 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 

海流出力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

関連する問題