awk可跳过直至并包括图案的线条

awk可跳过直至并包括图案的线条,awk,vcf-variant-call-format,Awk,Vcf Variant Call Format,我试图使用awk跳过所有行,包括特定模式/^#CHROM/,并在下面的行上开始处理。awk确实执行,但当前返回选项卡中以分隔的文件中的所有行。谢谢:) 文件 ##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=

我试图使用
awk
跳过所有行,包括特定模式
/^#CHROM/
,并在下面的行上开始处理。
awk
确实执行,但当前返回
选项卡中以
分隔的文件
中的所有行。谢谢:)

文件

##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
设计输出

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{ $6="ID=1"$6; $7="ID=2"$7; 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{ $6="ID=1"$6; $7="ID=2"$7; print }' file
使用以下awk方法:

awk -v OFS="\t" '/^#CHROM/{ r=NR }r && NR>r{ $6="ID=1"$6; $7="ID=2"$7; 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{ $6="ID=1"$6; $7="ID=2"$7; print }' file
有关此和其他awk搜索习惯用法的详细信息,请参阅。你的是那页上“b”的变体


有关此和其他awk搜索习惯用法的详细信息,请参阅。您的是该页面上“b”的变体。

尝试
/^ CHROM/{f=1;next}f{print…}
f{print…}/^ CHROM/{f=1}
/^ CHROM/
是一个regexp,相当于
$0~/^ CHROM/
。您认为比较的结果是行号还是布尔真/假?如果是布尔值,为什么要将其与当前行号(NR)进行比较?如果是行号,您认为测试当前行号是否大于当前行号的结果会是什么?请尝试
/^ CHROM/{f=1;next}f{print…}
f{print…}/^ CHROM/{f=1}
/^ CHROM/
是一个与
$0~/^ CHROM CHROM相当的regexp。您认为比较的结果是行号还是布尔真/假?如果是布尔值,为什么要将其与当前行号(NR)进行比较?如果是一个行号,您认为测试当前行号是否大于当前行号的结果会是什么?只需将块交换为四舍五入,那么
f
将在设置后对行进行求值。谢谢大家:)。只需将块交换为四舍五入,那么
f
将在设置后对行进行求值。谢谢大家:)。