这个问题看起来可能与遗传学有关,但实际上它是基于编程的。
我有以下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中的字符串是可变的,所以这不适合我。
我应该使用哪种外壳加密方法?
谢谢!
$ 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 的字段