提取VCF文件中管道之间的可变字符串内容



这个问题看起来可能与遗传学有关,但实际上它是基于编程的。

我有以下vcf文件(特定的txt文件,从工具中获得,称为VEP(,带有标题和列的内容:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  sample.F
chr1    10643146    .   G   GC  63.2    PASS    CSQ=|FAIL|0.00|0.00|0.01|0.00|13|40|-3|13|||MODIFIER|CASZ1|ENSG00000130940|ENST00000377022|protein_coding||19/20|||||,|FAIL|0.00|0.00|0.01|0.00|13|40|-3|13|||MODIFIER|AL139423.1|ENSG00000272078|ENST00000606802|lncRNA||1/1|||||  GT:GQ:DP:AD:VAF:PL  0/1:58:86:40,45:0.523256:63,0,59
chr1    10646034    .   G   C   64.8    PASS    CSQ=|FAIL|0.00|0.00|0.00|0.00|22|3|1|2|||MODIFIER|CASZ1|ENSG00000130940|ENST00000377022|protein_coding||17/20|||||,|FAIL|0.00|0.00|0.00|0.00|22|3|1|2|||MODIFIER|AL139423.1|ENSG00000272078|ENST00000606802|lncRNA||1/1|||||    GT:GQ:DP:AD:VAF:PL  0/1:59:27:13,14:0.518519:64,0,60

我只想在第一列中提取基因名称,在第二列中提取染色体位置,这样我的最终文件可以是:

chr1:10643146             CASZ1

BCFtools插件https://samtools.github.io/bcftools/howtos/plugin.split-vep.html不合适,所以我决定定制方法。

  1. 我写了一行打印出需要的列:

awk 'BEGIN {OFS ="t" ; FS = "t"};{print $1, $2, $8}' sample > out

  1. 我很困惑,哪个bash命令适合在管道之间提取字段13(即,以CSQ开头的行:字符串CASZ1,在本示例中的MODERATE之后(,所以从所有的长行中,我只得到管道符号13之间的字符串。和14

来自

CSQ=|FAIL|0.00|0.00|0.00|0.00|22|3|1|2|||MODIFIER|CASZ1|ENSG00000130940|ENST00000377022|protein_coding||17/20|||||,|FAIL|0.00|0.00|0.00|0.00|22|3|1|2|||MODIFIER|AL139423.1|ENSG00000272078|ENST00000606802|lncRNA||1/1||||| 

CASZ1
  1. 我查看了SO中的解决方案,发现:

bash如何根据字段的内容从分隔字符串中提取字段

但问题是字段13中的字符串是可变的,所以这不适合我。

我应该使用哪种外壳加密方法?

谢谢!

$ awk -F'[t|]' -v OFS='t' 'NR>1{print $1":"$2, $21}' file
chr1:10643146   CASZ1
chr1:10646034   CASZ1

我尝试了bcftools插件,但得到了:

The field "Consequence" is not present in INFO/CSQ: "Consequence annotations from Ensembl VEP. Format: 'Allele

我的vcf中有CSQ字段,但没有名为Consequences 的字段

最新更新