извлекать содержимое переменной строки между каналами в файле 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 не подходил, поэтому я решил применить индивидуальный подход.
- Я написал строку, которая распечатывает нужные столбцы:
awk 'BEGIN {OFS ="\t" ; FS = "\t"};{print $1, $2, $8}' sample > out
- Я запутался, какая команда 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
- Я посмотрел решения в SO, нашел следующее:
bash, как извлечь поле на основе его содержимого из строки с разделителями
но проблема в том, что строки в поле № 13 являются переменными, поэтому мне это не подходит.
Какой подход к сценарию оболочки я должен использовать?
Спасибо!
2 ответа
$ 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, но нет полей с именем "Последствия"