C语言计算fastq文件GC含量2
改进了一下,利用zlib可以读取gz格式的压缩文件,也可以直接计算非压缩格式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zlib.h> #define buff 1024 typedef unsigned long long int u_llong; static void usage(int num,const char *str)
{
if(num !=2)
{
fprintf(stderr,"usage: %s fqFile\n",str);
exit(0);
}
} static u_llong* gcN(char base[buff])
{
base[strlen(base)-1]='\0'; int i;
static u_llong gactn[]={0,0,0,0,0};
for(i=0; i<strlen(base); i++)
{
if(base[i]=='G')
gactn[0]++;
if(base[i]=='A')
gactn[1]++;
if(base[i]=='C')
gactn[2]++;
if(base[i]=='T')
gactn[3]++;
if(base[i]=='N')
gactn[4]++;
}
return gactn;
} static void calc(const char *fqfile)
{
//FILE *fq;
gzFile fq;
if((fq=gzopen(fqfile,"r")) == NULL)
{
perror("fopen");
exit(1);
}
//fprintf(stderr,"fq file <%s> open suceed!\n",fqfile); char base[buff];
char qual=0;
u_llong *p=NULL;
while((gzgets(fq,base,buff))!= NULL) // 这里用 gzgets 替代 fgets
{
if(base[0]=='@')
{
continue;
}
if(base[0]=='+')
{
qual=1;
continue;
}
if(qual==1)
{
qual=0;
continue;
} p=gcN(base); // G A C T N
} float GClevel;
u_llong sum=0;
for(int i=0; i<5; i++)
{
sum+=*(p+i);
}
GClevel=(float)(*p+*(p+2)) / sum * 100; fprintf(stdout,"G:%lld\tA:%lld\nC:%lld\tT:%lld\nN:%lld\tsum:%lld\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),sum);
fprintf(stdout,"GC:%.2f%%\n",GClevel);
} int main(int argc,const char *argv[])
{
usage(argc,argv[0]);
calc(argv[1]); exit(0);
}
备注: gcc编译记得添加参数 -lz
C语言计算fastq文件GC含量2的更多相关文章
- C语言计算fastq文件GC含量
C语言小练习:计算非压缩fastq格式的GC含量 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <strin ...
- 统计 fastq 文件 q20 , GC 含量的软件
二代测序的分析过程中,经常需要统计原始下机数据的数据量,看数据量是否符合要求:另外还需要统计q20,q30,GC含量等反应测序质量的指标: 在kseq.h 的基础上稍加改造,就可以实现从fastq 文 ...
- perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
一.关于程序: FUN:计算FASTA文件中每条序列中G和C的含量百分比,输出最大值及其id INPUT:FASTA格式文件 >seq1 CGCCGAGCGCTTGACCTCCAGCAAGACG ...
- R语言计算相关矩阵然后将计算结果输出到CSV文件
R语言计算出一个N个属性的相关矩阵(),然后再将相关矩阵输出到CSV文件. 读入的数据文件格式如下图所示: R程序采用如下语句: data<-read.csv("I:\\SB\land ...
- fastq文件基本信息统计工具
之前写的一个小工具,写的很简陋,名字取的也很随意就叫skr,哈哈.主要是fq转fa.合并多个染色体的vcf文件等,功能不多(主要是C写起来太操蛋了T_T),通常我也只用来统计fastq文件信息: 这里 ...
- c语言的头文件-不是c++类的头文件?
下面的概述是参考的这篇文章:http://blog.csdn.net/bingxx11/article/details/7771437 c语言编程中也有,也需要头文件, 头文件不只是C++的类才需要! ...
- 利用Bioperl的SeqIO模块解析fastq文件
测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...
- php 统计fasta 序列长度和GC含量
最近php7的消息铺天盖地, 忍不住想尝试下.星期天看了下语法, 写个小脚本练下手: 这个脚本读取fasta 文件, 输出序列的长度和GC含量: <?php $fasta = "tes ...
- perl 截取 fastq文件
#!/usr/bin/perl -w use warnings; use strict; input_fastq trim_length}; ; my ($fastq, $trim_length) = ...
随机推荐
- the Agiles Scrum Meeting 2
会议时间:2020.4.10 21:00 1.每个人的工作 今天已完成的工作 yjy:debug:班级创建了个人项目不能访问班级:教师窗口的前端bug. issues:Bug:教师创建博客时显示项目为 ...
- Spring Cloud Alibaba 的服务注册与发现
Spring Cloud Alibaba 服务发现例子 一.需求 1.提供者完成的功能 2.消费者完成的功能 3.可以附加的额外配置 二.实现步骤 1.总的依赖引入 2.服务提供者和发现者,引入服务发 ...
- skywalking实现分布式系统链路追踪
一.背景 随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个APM工具来分析系统中存在的各种性能指标问题以及调用关系.目前主流的APM工具有CAT.Zipkin.Pinpoi ...
- 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录
今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...
- WiFi天线对PCB布局布线和结构的要求详解 - 全文
随着市场竞争的加剧,硬件设备正以集成化的方向发展.天线也由外置进化内置再进化到嵌入式,我们先来介绍这类应用的天线种类: ⑴ On Board板载式:采用PCB蚀刻一体成型,性能受限,极低成本,应用于蓝 ...
- 常用Java API:大数类
摘要 java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1, 对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错 ...
- 注意 .NET string.GetHashCode() 用法
需求案例:需要把字符串存入数据库,并且要求数据库中不能有重复的字符串,由此就引出了将字符串hash成特定的hash值,依靠查询hash值是否重复来判断字符串是否重复.这样做的好处在于查询重复字符串的代 ...
- 跳台阶 牛客网 剑指Offer
跳台阶 牛客网 剑指Offer 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). class Solution: #ru ...
- JAVA笔记2__类/封闭性/构造方法/方法的重载/匿名对象
public class Main { public static void main(String[] args) { Chicken c1 = new Chicken(); Chicken c2 ...
- hdu 5056 Boring count (类似单调队列的做法。。)
给一个由小写字母构成的字符串S,问有多少个子串满足:在这个子串中每个字母的个数都不超过K. 数据范围: 1<=T<= 1001 <= the length of S <= 10 ...