【发布时间】:2017-11-16 20:40:03
【问题描述】:
我正在尝试使用 awk 跳过所有行,包括特定模式 /^#CHROM/ 并开始处理下面的行。 awk 确实执行但当前返回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 $1,$2,$3,$4,$5,"ID=1"$6,"ID=2"$7}' 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
【问题讨论】:
-
试试
/^#CHROM/{f=1;next} f{print ...}或f{print ...} /^#CHROM/{f=1} -
/^#CHROM/是一个等同于$0~/^#CHROM/的正则表达式。您认为该比较的结果是行号还是布尔值 true/false?如果是布尔值,为什么要将它与当前行号(NR)进行比较?如果是行号,你认为当前行号是否大于当前行号的测试结果会是什么?
标签: awk vcf-variant-call-format