如果行开始##或#不打印此行,但每次都必须打印第1行

时间:2014-07-16 11:24:23

标签: if-statement for-loop printing awk

我需要一些帮助,如果行开始##不打印此行的所有列,如果它不是以此开头,则打印$ 0。但每次都必须打印第一行。

我试过了:

awk '{for (i=0;i<=NF;i++);{if ($i == "##*") print ""; else print $0}}' 788613_v1.vcf > fedulka.tsv
你能帮帮我吗?

INPUT:

##fileformat=VCFv4.1
##INFO=<ID=VARB,Number=A,Type=Float,Description="Variant Hypothesis bias in prediction.">
##INFO=<ID=genes,Number=.,Type=String,Description="Overlapping gene name">
#CHROM  POS ID  REF
chr13   32890572    .   G
chr13   32890650    COSM35423   G
chr13   32893219    COSM23939   G

输出:

 ##fileformat=VCFv4.1

    #CHROM  POS ID  REF
    chr13   32890572    .   G
    chr13   32890650    COSM35423   G
    chr13   32893219    COSM23939   G

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个,

$ cat file
##title
foo
bar
#foo
##foobar
$ awk 'NR==1{print; next}{if ($1~/^#/) {next;} else {print}}' file
##title
foo
bar

除了第一行之外,它会跳过以#开头的行并打印所有剩余的行。

答案 1 :(得分:1)

只需打印第一个,然后检查该行是否以一个或两个#开头。如果没有发生,条件为真,则自动打印该行。

awk 'NR==1{print; next} !/^#{1,2}/' file

见样本:

$ awk 'NR==1{print; next} !/^#{1,2}/' a
##fileformat=VCFv4.1
chr13   32890572    .   G
chr13   32890650    COSM35423   G
chr13   32893219    COSM23939   G