【问题标题】:awk duplicated lines with starting with # symbolawk 以 # 符号开头的重复行
【发布时间】:2017-12-01 00:20:30
【问题描述】:

在下面的awk 中有一种方法可以只处理模式#CHROM 下面的行,但是在输出中打印所有内容。我遇到的问题是,如果我忽略所有带有# 的行,它们会在输出中打印,但没有# 的其他行会被重复。在我的数据文件中有数千行,但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  .

【问题讨论】:

    标签: awk


    【解决方案1】:

    你的第一句话:

    /^#/
    

    说“打印以#开头的每一行”和你的最后一个:

    1
    

    说“打印每一行”。因此输出中的重复行。

    仅修改不以# 开头但打印所有行的行将是:

    !/^#/ { do stuff }
    1
    

    【讨论】:

    • 那么我如何只处理没有# 的行但在输出中打印它们?在没有# 的情况下更新文件中的行不是需要1 吗?谢谢你:)。
    • 这行得通,但是有没有办法在模式#CHROM 之后处理行?那只是更新那些行?非常感谢:)。
    • 没有人喜欢chameleon questions。将其恢复原状,接受对您提出的问题的回答,然后在必要时提出新问题。
    • 我能够弄清楚....非常感谢您,并将更改帖子。再次感谢:)。
    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2016-08-30
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2015-03-31
    相关资源
    最近更新 更多