从 vcf 文件中提取字符串

Extract a string from vcf file

我需要从几亿行的 vcf 文件中的以下行中提取 RS=368138379 字符串。我想知道我们如何使用 grep -o "" 和正则表达式来快速提取它?

AF_ESP=0.0001;ALLELEID=359042;CLNDISDB=MedGen:C0678202,OMIM:266600;CLNDN=Inflammatory_bowel_disease_1;CLNHGVS=NC_000006.11:g.31779521C>T;CLNREVSTAT=no_assertion_criteria_provided;CLNSIG=association;CLNVC=single_nucleotide_variant;CLNVCSO=SO:0001483;GENEINFO=HSPA1L:3305;MC=SO:0001583|missense_variant;ORIGIN=4;RS=368138379

非常感谢。

类似于 RS=\d+ 的内容应该可以解决您正在寻找的表达式。

假设 text.log 包含您可以使用的日志:

grep -oE "RS=[0-9]+" test.log

如果您还想打印行号:

grep -noE "RS=[0-9]+" test.log

最好避免使用 to parse VCF/BCF files. Use bcftools query

bcftools query -f '%INFO/RS\n' -e 'INFO/RS="."' clinvar.vcf.gz

一个简单的 zgrep -oE "RS=[0-9]+" clinvar.vcf.gz 将丢失包含多个 ID 的记录的 RS 值,这些 ID 可以用竖线分隔:

##INFO=<ID=RS,Number=.,Type=String,Description="dbSNP ID (i.e. rs number)">

当可能值的数量变化、未知或无限时,数字为 .。请参阅:https://samtools.github.io/hts-specs/VCFv4.2.pdf