美文网首页R语言 生信
通过简单数据熟悉Linux下生物信息学各种操作3

通过简单数据熟悉Linux下生物信息学各种操作3

作者: Y大宽 | 来源:发表于2019-07-01 08:54 被阅读0次

    原地址
    几点说明
    1.非简单翻译,所有代码均可运行,为了辅助理解,基本每步代码都有结果,需要比较的进行了整合
    2.原文中的软件都下载最新版本
    3.原文中有少量代码是错误的,这里进行了修正
    4.对于需要的一些知识背景,在这里进行了注释或链接到他人博客


    一共4部分
    通过简单数据熟悉Linux下生物信息学各种操作1
    通过简单数据熟悉Linux下生物信息学各种操作2
    通过简单数据熟悉Linux下生物信息学各种操作3
    通过简单数据熟悉Linux下生物信息学各种操作4


    15awk的简单使用

    15.1提取Ebola的coding feature,genes和coding sequences

    efetch -db nucleotide -id NC_002549.1 -format gb > NC.gb
     ~/bin/readseq -format=GFF -o NC.gff NC.gb
    

    找到每个feature的长度

    cat NC.gff |awk '{print $1,$2,$3}'|head -5
    
    ##gff-version 2 
    # seqname source
    NC_002549 - source
    NC_002549 - 5'UTR
    NC_002549 - gene
    
    cat NC.gff|cut -f 1,2,3|head -5
    
    ##gff-version 2
    # seqname   source  feature
    NC_002549   -   source
    NC_002549   -   5'UTR
    NC_002549   -   gene
    

    几乎等同于上个命令。
    计算每个feature的长度

    cat NC.gff | awk ' { print $3, $5-$4 + 1 } ' | head -5
    
     1
    source 1
    source 18959
    5'UTR 55
    gene 2971
    

    仅提取CDS features

    cat NC.gff|awk '$3=="CDS" {print $3,$5-$4+1,$9}'
    
    CDS 2220 gene
    CDS 1023 gene
    CDS 981 gene
    CDS 885 group
    CDS 1146 group
    CDS 1095 gene
    CDS 884 group
    CDS 10 group
    CDS 867 gene
    CDS 756 gene
    CDS 6639 gene
    

    计算所有gene的累积长度

    cat NC.gff | awk '$3 =="gene" { len=$5-$4 + 1; size += len; print "Size:", size } '
    

    size+=len代表size=size+len,也就是在第一个len的基础上依次递加。为了清楚表示,不用这个运算符,比对结果看

    cat NC.gff | awk '$3 =="gene" { len=$5-$4 + 1; size += len; print "Size:", size } '
    
    Size: 2971
    Size: 4347
    Size: 5852
    Size: 8258
    Size: 9711
    Size: 11345
    Size: 18127
    
    cat NC.gff | awk '$3 =="gene" { print $3, $5-$4 + 1, $9 } '
    
    gene 2971 gene
    gene 1376 gene
    gene 1505 gene
    gene 2406 gene
    gene 1453 gene
    gene 1634 gene
    gene 6782 gene
    

    计算基因组有多大,有几种方式

    samtools view -h results.bam |head -2
    
    samtools view -h results.bam |head -2
    @HD VN:1.6  SO:coordinate
    @SQ SN:NC_002549.1  LN:18959
    

    可见,大小是18959
    基因占基因组的百分比
    我的NC.gff文件出现问题了,重新做一个

    readseq -format=GFF -o NC.gff NC.gb
    

    原文的代码是

    cat NC.gff | awk '$3 =="CDS" { len=$5-$4 + 1; size += len; perc=size/18959; print "Size:", size, perc } '
    

    以下代码我稍作了改动,以更好的显示。

    cat NC.gff |awk '$3=="CDS" {len=$5-$4+1; size+=len;perc=size*100/18959;print "Size:", size, perc,"%"}'
    
    Size: 2220 11.7095 %
    Size: 3243 17.1053 %
    Size: 4224 22.2797 %
    Size: 5109 26.9476 %
    Size: 6255 32.9922 %
    Size: 7350 38.7679 %
    Size: 8234 43.4306 %
    Size: 8244 43.4833 %
    Size: 9111 48.0563 %
    Size: 9867 52.0439 %
    Size: 16506 87.0616 %
    

    现在用genes和codings sequence做新的gff文件
    首先,文件的首行定义file的类型

    head -1 NC.gff  > NC-genes.gff
    head -1 NC.gff  > NC-cds.gff
    

    然后以不同的feature(这里是gene和cds)进行区分

    cat NC.gff | awk -F '\t' -v OFS='\t'  '$3=="gene" { print $0 }' >> NC-genes.gff
    cat NC.gff | awk -F '\t' -v OFS='\t' '$3=="CDS" { print $0 }'  >> NC-cds.gff
    

    这里我试了下,不用-F '\t' -v OFS='\t'参数也一样
    还需要细看,暂留个

    记号

    sam files是tab分隔的,可以awk处理
    多少数据有超过50的coverage

    samtools depth results.bam |awk '$3>50 {print $0}'|wc -l
    
    18053
    

    有多少templates长度大于500bp,注意其长度可以为负

    samtools view results.bam |awk '$9>500 {print $0}'|wc -l
    
    5065
    

    分隔GFF文件获取gene name

    18 比较比对工具

    下载安装bowtie2

    curl -OL https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.5.1/bowtie2-2.3.5.1-macos-x86_64.zip/download
    unzip bowtie2-2.3.5.1-macos-x86_64.zip 
    #做链接
    ln -s ~/src/bowtie2-2.3.5.1-macos-x86_64/bowtie2 ~/bin/
    ln -s ~/src/bowtie2-2.3.5.1-macos-x86_64/bowtie2-align-l ~/bin/
    ln -s ~/src/bowtie2-2.3.5.1-macos-x86_64/bowtie2-build ~/bin/
    

    为参考genome建立索引

    bowtie2-build ~/refs/852/NC.fa NC.fa
    

    格式化mutations,以便在浏览器展示,做成gff文件
    先看一下mutation files

    NC_002549.1 165 A   C   -
    NC_002549.1 1164    T   K   +
    NC_002549.1 2691    T   Y   +
    NC_002549.1 4436    A   R   +
    NC_002549.1 6620    C   G   -
    NC_002549.1 7709    T   Y   +
    NC_002549.1 10864   G   A   -
    NC_002549.1 11216   TT  -   -
    NC_002549.1 11490   G   R   +
    NC_002549.1 11677   T   Y   +
    NC_002549.1 12430   C   S   +
    NC_002549.1 12887   C   T   -
    NC_002549.1 13155   C   Y   +
    NC_002549.1 13767   T   W   +
    NC_002549.1 17580   G   R   +
    
    cat mutations.txt | awk ' {print $1, "wgsim", "mutation", $2, $2, ".", "+",  ".", "." }' > mutations.gff
    

    查看mutations.gff

    NC_002549.1 wgsim mutation 165 165 . + . .
    NC_002549.1 wgsim mutation 1164 1164 . + . .
    NC_002549.1 wgsim mutation 2691 2691 . + . .
    NC_002549.1 wgsim mutation 4436 4436 . + . .
    NC_002549.1 wgsim mutation 6620 6620 . + . .
    NC_002549.1 wgsim mutation 7709 7709 . + . .
    NC_002549.1 wgsim mutation 10864 10864 . + . .
    NC_002549.1 wgsim mutation 11216 11216 . + . .
    NC_002549.1 wgsim mutation 11490 11490 . + . .
    NC_002549.1 wgsim mutation 11677 11677 . + . .
    NC_002549.1 wgsim mutation 12430 12430 . + . .
    NC_002549.1 wgsim mutation 12887 12887 . + . .
    NC_002549.1 wgsim mutation 13155 13155 . + . .
    NC_002549.1 wgsim mutation 13767 13767 . + . .
    NC_002549.1 wgsim mutation 17580 17580 . + . .
    

    原文中接着进行比较,然后samtools view查看bwa和bowtie2产生的文件,可以直接看下面的最终脚本


    下面是最终脚本(比较bwa和bowtie2的比对结果),注意索引不一样

    READ1=read1.fq
    READ2=read2.fq
    #bwa的索引
    REFS=~/refs/852/NC.fa
    #bowtie2的索引
    ~/src/bowtie2-2.3.5.1-macos-x86_64/bowtie2-build ~/refs/852/NC.fa NC_bow.fa
    

    从基因组模拟reads

    wgsim -N 10000 -e 0.1 $REFS $READ1 $READ2 > mutations.txt
    

    mutation file转变为gff文件

    cat mutations.txt | awk -F '\t' ' BEGIN { OFS="\t"; print "##gff-version 2" } { print $1, "wgsim", "mutation", $2, $2, ".", "+",  ".", "name " $3 "/" $4 }' > mutations.gff
    

    增加read group to the mapping

    GROUP='@RG\tID:123\tSM:liver\tLB:library1'
    

    分别运行bwa和bowtie2分别产生bwa.sam和bow.sam
    bwa

    bwa mem -R $GROUP $REFS $READ1 $READ2 > bwa.sam
    

    bowtie2
    一定记得index和bam的不一样

    ~/src/bowtie2-2.3.5.1-macos-x86_64/bowtie2 -x NC_bow.fa -1 $READ1 -2 $READ2 >bow.sam
    
    10000 reads; of these:
      10000 (100.00%) were paired; of these:
        5107 (51.07%) aligned concordantly 0 times
        4893 (48.93%) aligned concordantly exactly 1 time
        0 (0.00%) aligned concordantly >1 times
        ----
        5107 pairs aligned concordantly 0 times; of these:
          4830 (94.58%) aligned discordantly 1 time
        ----
        277 pairs aligned 0 times concordantly or discordantly; of these:
          554 mates make up the pairs; of these:
            391 (70.58%) aligned 0 times
            163 (29.42%) aligned exactly 1 time
            0 (0.00%) aligned >1 times
    98.05% overall alignment rate
    

    我这个地方bwa比对没问题,但是一到bowtie2就报下面的错误

    Saw ASCII character 10 but expeacted 33-based Phred qual. libc++abi.dylib: terminating with uncaught exception of type int
    

    后来查看read1和read2的大小和序列,完全一致。问题不在这里
    最后发现竟然是因为read1和read2没有写权限。增加后即可正常运行。

    把sam文件转换为bam文件

    samtools view -Sb bow.sam >tmp.bam
    samtools sort tmp.bam bow.bam
    samtools sort tmp.bam -o bow.bam
    

    同样对bow.sam进行转换
    以上可以写成脚本(原文此处有错)

    for name in *.sam;
    do
        samtools view -Sb $name > $name.tmp.bam
        samtools sort -f $name.tmp.bam -o $name.bam
    done
    

    建立索引

    for name in *.bam
    do
        samtools index $name
    done
    

    最后结果如下

    -rw-r--r--  1 ucco  staff   768K  7  2 23:14 bow.bam
    -rw-r--r--  1 ucco  staff   152B  7  2 23:22 bow.bam.bai
    -rw-r--r--  1 ucco  staff   5.8M  7  2 23:06 bow.sam
    -rw-r--r--  1 ucco  staff   741K  7  2 23:19 bwa.bam
    -rw-r--r--  1 ucco  staff   152B  7  2 23:22 bwa.bam.bai
    -rw-r--r--  1 ucco  staff   5.5M  7  2 23:18 bwa.sam
    

    19 samtools faidx和pileups

    用samtools对fasta文件进行索引

    samtools faidx ~/refs/852/NC.fa
    

    查询

    samtools faidx ~/refs/852/NC.fa NC_002549:1-10
    >NC_002549:1-10
    
    cggacacaca
    

    可以同时查询多个范围

    samtools faidx ~/refs/852/NC.fa NC_002549:1-10 NC_002549:100-110
    
    >NC_002549:1-10
    cggacacaca
    >NC_002549:100-110
    tttaaattgaa
    

    用samtools的mpileup命令看有参考基因组和没有参考基因组的差异
    关于mpileup的用法见[samtools]mpileup命令简介

    #没有参考基因组
    samtools mpileup -Q 0 bwa.bam | less
    #有参考基因组
    samtools mpileup -f ~/refs/852/NC.fa -Q 0 bwa.bam | less
    

    为了只管显示,结果放一起

    左无右有

    相关文章

      网友评论

        本文标题:通过简单数据熟悉Linux下生物信息学各种操作3

        本文链接:https://www.haomeiwen.com/subject/rtywcctx.html