博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用kseq.h parse fasta/fastq 文件
阅读量:6259 次
发布时间:2019-06-22

本文共 1513 字,大约阅读时间需要 5 分钟。

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

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

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

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

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

#include 
#include
#include
#include "kseq.h" // STEP 1: declare the type of file handler and the read() function KSEQ_INIT(gzFile, gzread) int main(int argc, char *argv[]) { gzFile fp; kseq_t *seq; long seqs = 0; long bases = 0; int l; if (argc == 1) { fprintf(stderr, "Usage: %s
\n", argv[0]); return 1; } fp = gzopen(argv[1], "r"); // STEP 2: open the file handler seq = kseq_init(fp); // STEP 3: initialize seq while ((l = kseq_read(seq)) >= 0) { // STEP 4: read sequence //printf("name: %s\n", seq->name.s); //if (seq->comment.l) printf("comment: %s\n", seq->comment.s); //printf("seq: %s\n", seq->seq.s); //if (seq->qual.l) printf("qual: %s\n", seq->qual.s); bases += strlen(seq->seq.s); seqs += 1; } //printf("return value: %d\n", l); printf("reads: %ld\n", seqs); printf("bases: %ld\n", bases); kseq_destroy(seq); // STEP 5: destroy seq gzclose(fp); // STEP 6: close the file handler return 0; }

然后编译

gcc -o fastx_read_length -lz parse.c

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

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

 

转载地址:http://xpqsa.baihongyu.com/

你可能感兴趣的文章
应用服务器和web server 的区别
查看>>
Libevent笔记
查看>>
mycelipse之安装SVN1.6.5(转载)
查看>>
怎样把数据汇到Excel中的心得经验
查看>>
状态键盘完美适应iOS中的键盘高度变化
查看>>
Linux下oracle11g 导入导出操作详细
查看>>
每日英语:When Computer Games May Keep The Brain Nimble
查看>>
Android AsyncTask运作原理和源码分析
查看>>
demos.jquerymobile
查看>>
【Android】解决Android横竖屏切换数据丢失问题的方法
查看>>
spring+mybatis的多源数据库配置实战
查看>>
Oracle 导入外部文件数据库
查看>>
数值压缩存储方法Varint
查看>>
【转】Unity3.5 GameCenter基础教程
查看>>
C#_Profile 配置
查看>>
WCF和ASP.NET Web API在应用上的选择
查看>>
关于空指针NULL、野指针、通用指针
查看>>
从GIMP的Retinex算法里发现了一种高斯模糊的快速实现方法【开发记录】。
查看>>
c编写程序完成m名旅客和n辆汽车的同步程序代写
查看>>
oracle与sqlserver区别
查看>>