Regex 从vcf文件中提取字符串

Regex 从vcf文件中提取字符串,regex,grep,vcf-variant-call-format,Regex,Grep,Vcf Variant Call Format,我需要从几千万行的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

我需要从几千万行的
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
最好避免使用解析VCF/BCF文件。改用:

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

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

当可能值的数量变化、未知或无限制时,数字为
。请参阅:

到目前为止,您尝试了什么?我尝试了类似于cat File | grep“RS=(*?)”和grep-o'RS\=*?'所有失败非常感谢您的帮助,grep-oE“RS=\d+”clinvar.vcf对我的案例非常有用。
##INFO=<ID=RS,Number=.,Type=String,Description="dbSNP ID (i.e. rs number)">