samtools的使用笔记

Samtools是一个用于处理SAM和BAM格式文件的工具,它能进行排序、合并、建立索引等操作。通过sort命令对bam文件排序,merge用于合并已排序的bam文件,index创建索引以便快速访问,而fastq则能将bam转换为fastq或fasta格式。

简介

由于二代测序中普遍采取短读长(50~150bp)的测序策略,在后续分析的流程中需要使用比对软件将reads片段匹配到参考基因组中从而产生比对/匹配文件,进而用于后续流程的分析。

Samtools是一个用来处理SAM/BAM(SAM的二进制格式,用于压缩空间)格式的比对文件的工具,它能够输入和输出SAM(sequence alignment/map:序列比对)格式的文件,对其进行排序、合并、建立索引等处理。

常用命令

  1. view
    将sam文件转换成bam文件;然后对bam文件进行数据的排序(不属于本命令的功能)和提取(这些操作是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作)等操作;最后将排序或提取得到的数据输出为bam或sam(默认的)格式。
    bam文件优点:占用的磁盘空间小,二进制文件的运算速度快

    $ samtools view -b abc.sam > abc.bam
    
  2. sort

    对bam文件排序

    $ samtools sort [-n] [-m <maxMem>] <in.bam> <out.prefix>  
    	-m 参数默认下是 500,000,000 即500M(不支持K,M,G等缩写)。对于处理大数据时,如果内存够用,则设置大点的值,以节约时间。
    	-n 设定排序方式按short reads的ID排序。默认下是按序列在fasta文件中的顺序(即header)和序列从左往右的位点排序。
    
  3. merge

    将多个已经sort的bam融合成一个bam

    $ samtools merge [out.bam][in1.bam][in2.bam][in3.bam]
    
  4. index

    需要对bam文件进行排序后,才能进行index。本命令对bam文件建立索引并产生后缀为.bai的文件,用于快速的随机处理。

    $ samtools index aln.sorted.bam
    
  5. faidx
    本命令对fasta文件建立索引并产生后缀为.fai的文件,用于快速的随机处理。

    $ samtools faidx <in.bam> [ [...]]
    
  6. fastq

    将bam文件转换为fastq或fasta格式。

    $ samtools fastq [options...] <in.bam>
    
### 安装 Samtools #### 下载源码并编译安装 为了在Linux系统上安装Samtools,可以采用从GitHub仓库克隆最新版本的方式来进行操作。具体过程涉及获取软件包、配置环境以及执行构建和安装命令。 ```bash git clone https://github.com/samtools/samtools.git cd samtools/ autoheader && autoconf && ./configure --prefix=/usr/local/biosoft/samtools-1.10 make -j4 sudo make install ``` 上述命令序列完成了Git库的复制、进入项目目录、自动化工具准备、指定安装路径下的配置调整、多线程编译链接最后实施全局安装[^4]。 #### 验证安装成功与否 完成以上步骤之后,可以通过检查`samtools`命令是否可用及其版本号来验证安装的成功: ```bash samtools --version ``` 如果一切正常,则会显示当前已部署好的Samtools的具体版次信息。 #### 使用示例 下面给出一段简单的Python脚本用于调用Samtools查看SAM/BAM文件中的映射读取情况: ```python import subprocess def view_samtool_bam(bam_file): command = ["samtools", "view", bam_file] result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: raise Exception(f"Error executing samtools: {result.stderr.decode()}") output = result.stdout.decode() print(output) if __name__ == "__main__": # Replace with your BAM file path. view_samtool_bam("/path/to/sample.bam") ``` 此段代码展示了如何通过Python子进程模块(subprocess)来运行外部程序,并捕获其标准输出流作为返回值打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值