извлекать переменное строковое содержимое между каналами в файле 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: strings 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||||| 

to

CASZ1
  1. Я посмотрел решения в SO, нашел это:

bash как извлечь поле на основе его содержимого из строки с разделителями

но проблема в том, что строки в поле № 13 являются переменными, поэтому мне это не подходит.

Какой подход к шифрованию оболочки следует использовать?

Благодарю вас!


person user15480777    schedule 20.05.2021    source источник
comment
› Плагин BCFtools samtools.github.io/bcftools/howtos/plugin.split -vep.html не подходит, что не так с bcftools?   -  person Pierre    schedule 20.05.2021


Ответы (2)


Я попробовал плагин bcftools, но получил:

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

В моем vcf есть поля CSQ, но нет полей с именем Consequences.

person user15480777    schedule 04.06.2021

person    schedule
comment
да, но это не сработает, потому что, как биоинформатик, я знал, что может быть более одного значения тега CSQ, и может быть что-то большее, чем CSQ с использованием канала... - person Pierre; 20.05.2021
comment
Если образцы данных ОП не совсем репрезентативны для их реальных данных, им необходимо отредактировать вопрос, чтобы предоставить более репрезентативный пример, включая случаи, когда то, что я опубликовал, не будет работать. - person Ed Morton; 21.05.2021