C语言小练习:计算非压缩fastq格式的GC含量

  1. 1 #include <stdio.h>
  2. 2 #include <stdlib.h>
  3. 3 #include <string.h>
  4. 4 #define buff 1024
  5. 5
  6. 6 typedef unsigned long long int u_llong;
  7. 7
  8. 8 static void usage(int num,const char *str)
  9. 9 {
  10. 10 if(num !=2)
  11. 11 {
  12. 12 fprintf(stderr,"usage: %s fqFile\n",str);
  13. 13 exit(0);
  14. 14 }
  15. 15 }
  16. 16
  17. 17 static u_llong* gcN(char base[buff])
  18. 18 {
  19. 19 base[strlen(base)-1]='\0';
  20. 20
  21. 21 int i;
  22. 22 static u_llong gactn[]={0,0,0,0,0};
  23. 23 for(i=0; i<strlen(base); i++)
  24. 24 {
  25. 25 if(base[i]=='G')
  26. 26 gactn[0]++;
  27. 27 if(base[i]=='A')
  28. 28 gactn[1]++;
  29. 29 if(base[i]=='C')
  30. 30 gactn[2]++;
  31. 31 if(base[i]=='T')
  32. 32 gactn[3]++;
  33. 33 if(base[i]=='N')
  34. 34 gactn[4]++;
  35. 35 }
  36. 36 return gactn;
  37. 37 }
  38. 38
  39. 39 static void calc(const char *fqfile)
  40. 40 {
  41. 41 FILE *fq;
  42. 42 if((fq=fopen(fqfile,"r")) == NULL)
  43. 43 {
  44. 44 perror("fopen");
  45. 45 exit(1);
  46. 46 }
  47. 47 //fprintf(stderr,"fq file <%s> open suceed!\n",fqfile);
  48. 48
  49. 49 char base[buff];
  50. 50 char qual=0;
  51. 51 u_llong *p=NULL;
  52. 52 while((fgets(base,buff,fq))!= NULL)
  53. 53 {
  54. 54 if(base[0]=='@')
  55. 55 {
  56. 56 continue;
  57. 57 }
  58. 58 if(base[0]=='+')
  59. 59 {
  60. 60 qual=1;
  61. 61 continue;
  62. 62 }
  63. 63 if(qual==1)
  64. 64 {
  65. 65 qual=0;
  66. 66 continue;
  67. 67 }
  68. 68
  69. 69 p=gcN(base); // G A C T N
  70. 70 }
  71. 71
  72. 72 float GClevel,Nlevel;
  73. 73 u_llong sum=0;
  74. 74 for(int i=0; i<5; i++)
  75. 75 {
  76. 76 sum+=*(p+i);
  77. 77 }
  78. 78 GClevel=(float)(*p+*(p+2)) / sum * 100;
  79. 79 Nlevel=(float)(*p+4) / sum * 100;
  80. 80
  81. 81 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);
  82. 82 fprintf(stdout,"GC:%.2f%%\n",GClevel);
  83. 83
  84. 84 fclose(fq);
  85. 85 }
  86. 86
  87. 87 int main(int argc,const char *argv[])
  88. 88 {
  89. 89 usage(argc,argv[0]);
  90. 90 calc(argv[1]);
  91. 91
  92. 92 exit(0);
  93. 93 }

C语言计算fastq文件GC含量的更多相关文章

  1. C语言计算fastq文件GC含量2

    改进了一下,利用zlib可以读取gz格式的压缩文件,也可以直接计算非压缩格式 #include <stdio.h> #include <stdlib.h> #include & ...

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

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

  3. perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键

    一.关于程序: FUN:计算FASTA文件中每条序列中G和C的含量百分比,输出最大值及其id INPUT:FASTA格式文件 >seq1 CGCCGAGCGCTTGACCTCCAGCAAGACG ...

  4. R语言计算相关矩阵然后将计算结果输出到CSV文件

    R语言计算出一个N个属性的相关矩阵(),然后再将相关矩阵输出到CSV文件. 读入的数据文件格式如下图所示: R程序采用如下语句: data<-read.csv("I:\\SB\land ...

  5. fastq文件基本信息统计工具

    之前写的一个小工具,写的很简陋,名字取的也很随意就叫skr,哈哈.主要是fq转fa.合并多个染色体的vcf文件等,功能不多(主要是C写起来太操蛋了T_T),通常我也只用来统计fastq文件信息: 这里 ...

  6. c语言的头文件-不是c++类的头文件?

    下面的概述是参考的这篇文章:http://blog.csdn.net/bingxx11/article/details/7771437 c语言编程中也有,也需要头文件, 头文件不只是C++的类才需要! ...

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

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

  8. php 统计fasta 序列长度和GC含量

    最近php7的消息铺天盖地, 忍不住想尝试下.星期天看了下语法, 写个小脚本练下手: 这个脚本读取fasta 文件, 输出序列的长度和GC含量: <?php $fasta = "tes ...

  9. perl 截取 fastq文件

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

随机推荐

  1. Prometheus的单机部署

    Prometheus的单机部署 一.什么是Prometheus 二.Prometheus的特性 三.支持的指标类型 1.Counter 计数器 2.Gauge 仪表盘 3.Histogram 直方图 ...

  2. 洛谷 P3147 [USACO16OPEN]262144 P

    链接: P3147 P3146双倍经验 前言: 今天发现的一道很有意思的DP题 分析: 第一眼以为是区间DP,于是设f[i][j]为从第i个数到第j个数可以合出的最大值,但思考后发现并不能简单合并,并 ...

  3. 『学了就忘』Linux基础 — 10、VMware虚拟机中克隆的使用

    目录 1.什么是克隆 2.克隆的两种类型 (1)完整克隆 (2)链接克隆 3.克隆操作 步骤一:克隆虚拟机 步骤二:进行克隆导向 3.快照与克隆的区别 4.镜像的管理 快照和克隆是VMware中两个非 ...

  4. git merge远程合并

    当某个分支上的开发工作完成后需要将其合入主分支master 但是在提交合并前我们自己最好做一次衍合,目的是检测是否有冲突的风险,如果有应该在本分支先解决冲突然后在提交合并. 否则解决冲突的工作就全部转 ...

  5. dhcpd:bad subnet number/mask combination. subnet

    今天在调试wifi热点启动hdcpd服务时出现报错"bad subnet number/mask combination. subnet 192.168.1.1", Interne ...

  6. TypeError: 'encoding' is an invalid keyword argument for this function 解决Python 2.7

    在python2.7中这样调用代码 open('file/name.txt','r',encoding= 'utf-8').read() 会出现 TypeError: 'encoding' is an ...

  7. Luogu P1118 [USACO06FEB]数字三角形 Backward Digit Sums | 搜索、数学

    题目链接 思路:设一开始的n个数为a1.a2.a3...an,一步一步合并就可以用a1..an表示出最后剩下来的数,不难发现其中a1..an的系数恰好就是第n层杨辉三角中的数.所以我们可以先处理出第n ...

  8. PHP笔记2__变量/字符串/类型转换/常量/,,

    <?php //可变变量 $a = "ok"; $$a = "fine"; $$$a = "er"; echo $ok; echo & ...

  9. 数字孪生 3D 科技馆的科学传播新模式

    前言 科技馆是一种参与型体验型的博物馆,以传播科学知识.培养公众的科学创新技术为宗旨,并以其生动的展现方式得到公众的广泛欢迎.一直以来,我国科技馆的发展受到各种因素的制约和影响,发展缓慢.如今在我国经 ...

  10. 『学了就忘』Linux基础命令 — 28、别名和常用快捷键

    目录 1.别名 2.常用快捷键 1.别名 别名也是Shell中的命令. 命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的. 命令格式: # 查询系统中命令别名 [root@localhost ...