awk 跳过直到并包括模式的行

awk to skip lines up to and including pattern

我正在尝试使用 awk 跳过包括特定模式 /^#CHROM/ 的所有行并开始处理下面的行。 awk 确实执行了,但目前 returns tab-delimited file 中的所有行。谢谢 :).

文件

##INFO=<ID=ANN,Number=1,Type=Integer,Description="My custom annotation">
##source_20170530.1=vcf-annotate(r953) -d key=INFO,ID=ANN,Number=1,Type=Integer,Description=My custom annotation -c CHROM,FROM,TO,INFO/ANN
##INFO=<ID=,Number=A,Type=Float,Description="Variant quality">
#CHROM  POS ID  REF ALT
chr1    948846  .   T   TA  NA  NA
chr2    948852  .   T   TA  NA  NA
chr3    948888  .   T   TA  NA  NA

awk

awk -F'\t' -v OFS="\t" 'NR>/^#CHROM/ {print ,,,,,"ID=1","ID=2"}' file

期望输出

chr1    948846  .   T   TA  ID1=NA  ID2=NA
chr2    948852  .   T   TA  ID1=NA  ID2=NA
chr3    948888  .   T   TA  ID1=NA  ID2=NA

使用以下awk方法:

awk -v OFS="\t" '/^#CHROM/{ r=NR }r && NR>r{ ="ID=1"; ="ID=2"; print }' file

输出:

chr1    948846  .   T   TA  ID=1NA  ID=2NA
chr2    948852  .   T   TA  ID=1NA  ID=2NA
chr3    948888  .   T   TA  ID=1NA  ID=2NA

  • /^#CHROM/{ r=NR } - 捕获 模式 行号

替代方法如下所示:

awk -v OFS="\t" '/^#CHROM/{ f=1; next }f{ ="ID=1"; ="ID=2"; print }' file
awk 'BEGIN{FS=OFS="\t"} f{print ,,,,,"ID1=","ID2="} /^#CHROM/{f=1}' file

请参阅 了解有关此和其他 awk 搜索习惯用法的详细信息。你的是该页面上 "b" 的变体。