美文网首页Bioinformatics
读源码学C之阅读李恒的bioawk

读源码学C之阅读李恒的bioawk

作者: xuzhougeng | 来源:发表于2018-10-01 21:46 被阅读387次

目前尚没有能力直接去阅读htslib的源代码,看到bioawk的代码稍微简单点,因此准备先从这里下手,bioawk的项目地址为https://github.com/lh3/bioawk

这次先阅读了"main.c"部分学习如何解析参数。

1-23: 版权信息部分

copyright

25: 版本信息
27: #define创建自己的常量和宏
27-35: 导入标准库的头文件和原来awk的头文件

导入标准库

37-38: extern声明后面的变量来自于其他文件,避免编译时报错

声明外部变量

49-53: 定义后续用于解析的最大程序文件数(pfile), 当前解析的程序文件(curpfile)

定义变量

62-63: setlocale设置区域相关的设置,其中LC_CTYPE 影响所有字符函数。LC_NUMERIC影响 localeconv 函数提供的小数点格式化和信息

区域相关设置

65:获取程序的名字
66-70:如果参数只有一个,也就是只输入程序名,那么就用fprintf将信息格式化输出的标准错误输出(stderr),也就是你可以用bioawk 2> err.log而不是bioawk > err.log报错报错信息。

判断

78:使用while语句开始解析参数。 argv[1][0] == '-' &&argv[1][1] != '\0' 表示第二个C语言接受的第二个参数是-, --开头的参数

解析参数

79-83:使用string.h的strcmp进行文本比较,如果输入是 "-version" 或者是 "--version" 则输出版本信息,其中version在第25行定义。 strcmp返回0表示比较的内容相同,否则都是不相同。最后用break跳出循环

版本参数

84-88: 使用string.h的strncmp比较两个字符串的最多n个字符。 也就是说,你可以用bioawk -c fastx ------------ '{printf $seq’ xxxx.fa 这种无聊的操作. 后续的argc--argv--对当前解析的参数位置进行移动,就能读取到后面的参数了。

显示声明参数结尾

89: 开始用switch解析短参数

90-93:用strcmp判断是否是 -safe,是的话就将safe赋值为1,最后跳出switch,

第一个判断

167-168:跳出switch之后,--argc++argv进行参数偏移,也就是读取下一个参数

跳出循环

94-107: 处理program文件。将文件名存放到pfile(字符串数组),也就是将文件名开头的字符的地址( &argv[1][2])存放到pfile数组中。这里考虑有两种习惯,一种是-fsomefile,另一种是-f samefile, 其中后者需要对输入参数进行偏移。

处理program文件

108-123:处理分隔符。同样考虑到-F"\t和-F t这两种情况

image.png

124-126:使用string.h的strcpy进行文本复制。

复制字符串

144-149: 使用stdlib.h的atoi函数将字符串转成数值。这里发现如果用bioawk -d 0就会进行调试模式哦,这和原本awk -d是不同的。

调试功能

153-162:对格式进行解析。

选择格式

相关文章

  • 读源码学C之阅读李恒的bioawk

    目前尚没有能力直接去阅读htslib的源代码,看到bioawk的代码稍微简单点,因此准备先从这里下手,bioawk...

  • bioawk

    bioawk是awk的超集. bioawk能额外解析的生物数据格式 $ bioawk -c help bed:1:...

  • Java8 源码阅读 - AbstractQueuedSynch

    Java8 源码阅读 - AbstractQueuedSynchronizerJava8 源码阅读 - AQS之C...

  • 源码阅读之TextView(2)--AutoSizeTextTy

    导读:源码阅读系列链接:源码阅读之TextView(1)[https://www.jianshu.com/p/1c...

  • 生信黑板报之bioawk

    bioawk是李恒开发的基于linux awk的一个扩展工具。用过awk的都知道,它是一款逐行处理文本的古老编程语...

  • webbench源码阅读

    [C] webbench源码阅读 毕业以后已经很少系统的去读源码了,个人觉得C语言依然是学习Linux和操作系统非...

  • 【源码阅读】Glide源码阅读之with方法(一)

    前言:本篇基于4.8.0版本【源码阅读】Glide源码阅读之with方法(一)【源码阅读】Glide源码阅读之lo...

  • bioawk

    bioawk -c help bed:1:chrom 2:start 3:end 4:name 5:score 6...

  • 人际关系是双向的(摘抄)

    人际关系永远是双向的,学之者人恒学之,助人者人恒助之,敬人者人恒敬之,爱人者人恒爱之。同时,说人者人恒说之,整人者...

  • C++奇淫巧技汇总

    众所周知,Cartographer源码中使用大量c++11特性,为了更加丝滑地读代码,本文将记录源码阅读过程中遇到...

网友评论

    本文标题:读源码学C之阅读李恒的bioawk

    本文链接:https://www.haomeiwen.com/subject/otbnoftx.html