【生信技能树】VCF格式文件的shell小练习

首先友情宣传生信技能树


题目来源:【生信技能树】VCF格式文件的shell小练习

首先使用bowtie2软件自带的测试数据生成sam/bam文件,还有vcf文件。代码如下:

mkdir -p ~/biosoft
cd ~/biosoft
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 
bash Miniconda3-latest-Linux-x86_64.sh 
source ~/.bashrc 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
conda create -y -n test
conda activate test
conda install -y samtools bcftools

wget https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.4.3/bowtie2-2.3.4.3-linux-x86_64.zip 
unzip bowtie2-2.3.4.3-linux-x86_64.zip 
cd ~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads

../../bowtie2 -x ../index/lambda_virus -1 reads_1.fq -2 reads_2.fq | samtools sort -@ 5 -o tmp.bam - 
bcftools mpileup -f ../reference/lambda_virus.fa tmp.bam |bcftools call -vm > tmp.vcf

LINUX练习题

  1. 把突变记录的vcf文件区分成INDELSNP条目
$grep '^##' tmp.vcf | grep 'INDEL'
##INFO=<ID=INDEL,Number=0,Type=Flag,Description="Indicates that the variant is an INDEL.">
$grep -v '^#' tmp.vcf | grep 'INDEL' > tmp_INDEL.vcf
$cat tmp_INDEL.vcf | wc -l
69
$grep -v '^#' tmp.vcf | grep -v 'INDEL' > tmp_SNP.vcf
$cat tmp_SNP.vcf | wc -l
36
  1. 统计INDEL和SNP条目的各自的平均测序深度
$grep '^##' tmp.vcf | grep 'depth'
##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">
$egrep -o 'DP=[0-9]+;' tmp_INDEL.vcf | awk -v FS='=' 'BEGIN{num=0;}{num=num+$2}END{print(num/NR)}'
40.6087
$egrep -o 'DP=[0-9]+;' tmp_SNP.vcf | awk -v FS='=' 'BEGIN{num=0;}{num=num+$2}END{print(num/NR)}'
37
  1. 把INDEL条目再区分成insertion和deletion情况
$awk '$4>$5{print}' tmp_INDEL.vcf > tmp_deletion.vcf
$cat tmp_deletion.vcf |wc -l
68
$awk '$4<$5{print}' tmp_INDEL.vcf > tmp_insertion.vcf
$cat tmp_insertion.vcf | wc -l
1
  1. 统计SNP条目的突变组合分布频率
$awk '{print $4"->"$5}' tmp_SNP.vcf | sort | uniq -c
      7 A->C
      1 A->G
      4 A->T
      2 C->A
      4 C->G
      3 G->A
      2 G->C
      4 G->T
      6 T->A
      1 T->C
      2 T->G
  1. 找到基因型不是 1/1 的条目,个数
$grep -v '^#' tmp.vcf | grep -v '1/1' |wc -l
26
$grep -v '^#' tmp.vcf | grep -v '1/1' |less -SN
  1. 筛选测序深度大于20的条目
$egrep -o "DP=[0-9]+;" tmp.vcf |awk '{print(length($0)-4)}'| sort | uniq -c#查看测序深度位数
      2 1
    103 2
#测序深度最多只有2位数
$egrep "DP=2[1-9];|DP=[3-9][0-9];" tmp.vcf |wc -l
100
$egrep "DP=2[1-9];|DP=[3-9][0-9];" tmp.vcf |less -SN
  1. 筛选变异位点质量值大于30的条目
$grep -v '^#' tmp.vcf |awk '$6>30{print}' > tmp_QUALmorethan30.vcf
$cat tmp_QUALmorethan30.vcf | wc -l
99
$less -SN tmp_QUALmorethan30.vcf
  1. 组合筛选变异位点质量值大于30并且深度大于20的条目
$egrep "DP=2[1-9]|DP=[3-9][0-9]" tmp_QUALmorethan30.vcf | wc -l
97
$egrep "DP=2[1-9]|DP=[3-9][0-9]" tmp_QUALmorethan30.vcf | less -SN
  1. 理解DP4=4,7,11,18 这样的字段,就是 Number of high-quality ref-forward , ref-reverse, alt-forward and alt-reverse bases 计算每个变异位点的 AF
  1. DP4,高质量测序碱基,4个数字分别对应ref-前,ref-后,alt-前,alt-后
  • 【理解DP4=4,7,11,18】
    • 参考序列变异位点之前有4个高质量测序碱基,之后有7个高质量测序碱基;
    • 变异序列变异位点之前有11个高质量测序碱基,之后有18个高质量测序碱基
  1. AF:Allel Frequency 等位基因频率
    参考:简书:刘小泽 - VCF格式

AC、AF、AN【和等位基因有关】: AC:Allele Count该位点变异的等位基因数目; AF:Allel Frequency 等位基因频率; AN:Allel Number 等位基因的总数目
【单看这个不好理解,举一个二倍体diploid例子:基因型0/1表示为杂合子,该位点只有一个等位基因发生突变,AF=0.5(在该位点只有50%的等位基因发生突变),总的等位基因数目为2;基因型1/1表示为纯合子,AC=2,AF=1,AN=2】

所以,
0/0的AF=0;
0/1的AF=0.5;
1/1的AF=1;
另外,AF标签属于INFO列

$grep -v "^#" tmp.vcf | awk '{print$10}' |awk -F":" '{print$1}' | sort | uniq -c #查询样本基因型
     26 0/1
     79 1/1
$grep -v "^#" tmp.vcf | awk '{if ($0~"1/1"){$8=$8";AF=1";print$0} else if ($0~"0/1"){$8=$8";AF=0.5";print$0}}' > tmp_addAF.vcf
  1. 在前面步骤的bam文件里面找到这个vcf文件的某一个突变位点的测序深度表明的那些reads,并且在IGV里面可视化bam和vcf定位到该变异位点。
$grep -v "^#" tmp.vcf |head -10 |less -SN

10.1 如图,选择1104突变位点,DP=43,参考序列为C,突变成A

10.2 检索bam文件
参考:徐洲更hoptop - SAMtools: SAM格式的处理利器
bam文件:
第4列:比对到的位置
第10列:segment序列

$samtools-1.9 view tmp.bam | awk '{if ($3!="*" && $4<=1104 && substr($10,1104-$4+1,1)=="A") print}' | wc -l
45#与vcf文件中DP=43不符合

10.3 tmp.vcf在IGV中可视化


IGV-vcf

10.4 tmp.bam在IGV中可视化


IGV-bam
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容