我需要一些帮助,如果行开始##不打印此行的所有列,如果它不是以此开头,则打印$ 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
答案 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