在分析中经常需要统计fasta/fastq文件的序列数和碱基数, 但是没有找到一些专门做这件事的小工具,可能是这个功能太简单了;

之前用自己写的perl的脚本统计这些信息, 当fastq文件非常大时,就变的很慢;

今天在网上搜到kseq.h可以parse fasta/fastq文件,用C写的, 速度很快;

http://lh3lh3.users.sourceforge.net/parsefastq.shtml

自己试了一下, 在这个基础上添加个小功能, 命名为parse.c:

  1. #include <zlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include "kseq.h"
  5. // STEP 1: declare the type of file handler and the read() function
  6. KSEQ_INIT(gzFile, gzread)
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10. gzFile fp;
  11. kseq_t *seq;
  12. long seqs = ;
  13. long bases = ;
  14. int l;
  15. if (argc == ) {
  16. fprintf(stderr, "Usage: %s <in.seq>\n", argv[]);
  17. return ;
  18. }
  19. fp = gzopen(argv[], "r"); // STEP 2: open the file handler
  20. seq = kseq_init(fp); // STEP 3: initialize seq
  21. while ((l = kseq_read(seq)) >= ) { // STEP 4: read sequence
  22. //printf("name: %s\n", seq->name.s);
  23. //if (seq->comment.l) printf("comment: %s\n", seq->comment.s);
  24. //printf("seq: %s\n", seq->seq.s);
  25. //if (seq->qual.l) printf("qual: %s\n", seq->qual.s);
  26. bases += strlen(seq->seq.s);
  27. seqs += ;
  28. }
  29. //printf("return value: %d\n", l);
  30. printf("reads: %ld\n", seqs);
  31. printf("bases: %ld\n", bases);
  32. kseq_destroy(seq); // STEP 5: destroy seq
  33. gzclose(fp); // STEP 6: close the file handler
  34. return ;
  35. }

然后编译

gcc -o fastx_read_length -lz parse.c

因为调用zlib,读取压缩文件,所以编译时需要添加-lz 选项;

测试了一下可以跑通;感觉kseq.h功能好强大, 支持fasta/fastq,支持gzip压缩文件

利用kseq.h parse fasta/fastq 文件的更多相关文章

  1. fastx tookit 操作fasta/fastq 文件 (1)

    准备测试文件 test.fq, 包含4条fastq 文件,碱基编码格式为phred64; @FC12044_91407_8_200_406_24 NTTAGCTCCCACCTTAAGATGTTTA + ...

  2. 将fasta fastq文件线性化处理

    将fasta文件线性化处理 awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),$0);N++;n ...

  3. seqtk 一款快速处理fasta/fastq 文件的小程序

    seqtk 的 GitHub 官网 https://github.com/lh3/seqtk 安装 git clone https://github.com/lh3/seqtk.git cd seqt ...

  4. 利用Bioperl的SeqIO模块解析fastq文件

    测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...

  5. 统计 fastq 文件 q20 , GC 含量的软件

    二代测序的分析过程中,经常需要统计原始下机数据的数据量,看数据量是否符合要求:另外还需要统计q20,q30,GC含量等反应测序质量的指标: 在kseq.h 的基础上稍加改造,就可以实现从fastq 文 ...

  6. fasta/fastq格式解读

    1)知识简介--------------------------------------------------------1.1)测序质量值 首先在了解fastq,fasta之前,了解一下什么是质量 ...

  7. 利用mongoimport命令导入csv大文件

    最近我同事做了一个PHP项目,其中有一个功能是 上传excel文件并将数据导入mongodb某个集合中. 通常的做法是 写一个上传文件的页面,然后后端 读取 这个文件,利用phpexcel类库将这个e ...

  8. 利用gsoap工具,通过wsdl文件生成webservice的C++工程文件

    一.下载gsoap文件,下载地址:https://zh.osdn.net/projects/sfnet_gsoap2/releases/ 二.以gsoap-2.8为例,解压到D盘,在D:/gsoap- ...

  9. perl 截取 fastq文件

    #!/usr/bin/perl -w use warnings; use strict; input_fastq trim_length}; ; my ($fastq, $trim_length) = ...

随机推荐

  1. SpringMVC中异常处理详解

    Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图 分析上图可以轻松总结出,spring mvc里有三种异常处理方法: 1.使用官方提供的简单异 ...

  2. Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  3. iOS: 让键盘消失的的4种方法

    转自:http://leopard168.blog.163.com/blog/static/168471844201422121310352/ 在iOS app中,只要用到编辑框(UITextFiel ...

  4. winphone开发环境配置

    环境:操作系统win7 要进行winphone开发,必须进行一些环境的配置.下面是我的一些配置总结. 1.操作系统 winphone开发仅仅能在win8下开发.所以首先得安装win8.能够使用nt6 ...

  5. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  6. python学习之itsdangerous模块

    类 from itsdangerous import URLSafeTimedSerializer as ustsr class ustsr(secret_key) 参数: secret_key可以是 ...

  7. cocos2d-x Schedule详解

    原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Coc ...

  8. mac os开发之简单动画

    [NSAnimationContextbeginGrouping]; [[NSAnimationContextcurrentContext] setDuration:.1f]; [[self.wind ...

  9. 解决Ubuntu16的风扇高速旋转问题(双显卡)

    问题描述 自从我的双显卡的笔记本装上Ubuntu 14 后,风扇狂转.发热巨大.网上一搜索估计是显卡驱动不太行.最近英伟达的Nvidia Prime可以完美地切换双显卡,安装这个软件后,风扇就不会狂转 ...

  10. JavaScript高级 面向对象(6)--值类型与引用类型的存储特征

    说明(2017.3.31): 1. 画图: var num = 123; var num2 = num; 值类型赋值的存储特点:将变量num内的数据全部拷贝一份,存储给新的变量num2,内存中有2个数 ...