分享一个统计Q20和Q30的小脚本📦

生信往往会统计fa或者fq文件的reads数目🉑,碱基数目,Q20和Q30,以作为补充材料放在附录。其实平时拿到这个质控的结果,还是挺简单的,用一些质控软件就可以快速得到这类结果。比如fastaqc或者fastq等。

当然,这些软件统计指标是质控软件附带的,毕竟质控软件主要还是为了过滤低质量的reads和去接头。那么假设我们现在对已经质控后的fq文件进行了额外的操作,例如去重,或者其他神奇操作😏😏。

那这个时候难道我们要重新输入fastq再进一波指控吗,仅仅为了四个质控指标。也可以,但就是太麻烦。

当然也可以将额外的fq文件操作放在质控软件分析之前,这样就可以避免这个问题。但是问题在于万一呢,所以单独做质控数目统计。

这个时候,就很需要找一种专门做Q20,Q30计算的小脚本📘,最好是更小,更快速,更便捷🏃🏃。

留下没技术的眼泪
当然这个脚本我是写不出来的,咱也就会点R,而Shell和Python也就是一点皮毛,而且最关键的是他们都不够快。Q20和Q30的公式我都懒得搞明白。得了,我去网上谷歌和百度下,还是Ctrl+C,V,难道不香吗?

经过在网上的一番查找,总觉得结果不是很满意,基本英文和中文的搜索结果都是说用C写的kseq.h来进行统计Q20和Q30,但是其中具体步骤言之不详,会浪费不少时间在摸索和尝试上。

我在搜索资料的基础上,进行自己的更改,应该说自己也是一种代码练习了。更改后的脚本,可以一步安装,并且优化输出结果的可读性。另外我自己在安装在集群上,并测试了一下数据结果,其统计结果和fastq的输出结果是一样的。也证明了该方法的准确性。我做了下包装📦📦。放在自己的Github上,分享给有需要的人。

方法原文链接:

  1. https://www.programmersought.com/article/47244571262/
  2. https://www.cnblogs.com/xudongliang/p/5307462.html
  3. http://lh3lh3.users.sourceforge.net/kseq.shtml
  4. https://stackoverflow.com/questions/19390245/how-to-parse-a-fasta-file-using-kseq-h
  5. https://www.geek-share.com/detail/2698055361.html

安装步骤(一步法推荐👍)

打包好的文件放在Githubwangjiaxuan666/WeChat-pubword/fastq_stat.tar.gz上,也可以点击阅读原文直达。如果Github被屏蔽了,可以在微信公众号对话框中输入序列质控或者质控,获得腾讯云下载链接。但是腾讯云存储按照访问流量,会收我钱😨,哈哈,最好还是别让我本就贫穷的日子雪上加霜了💔。

优化后的安装步骤

因为我做了一些优化,所以安装过程和输出结果要比上面的文章更方便一些。在我的Github上下载文件后,创建新的文件夹,然后解压

mkdir test
mv fastq_stat.tar.gz test
cd test
tar -zxvf fastq_stat.tar.gz

运行安装程序,并用test.fq.gz文件做测试结果。fastq_stat.sh同时支持-i 参数和直接参数(反正就一个参数)帮助文档可以用-h。

bash install.sh
bash fastq_stat.sh test.fq.gz
# test.fq.gz	10	1000	964(96.4%)	886(88.6%)	411(41.1%)
# bash fastq_stat.sh -i test.fq.gz
# 同时支持-i参数
bash fastq_stat.sh -h
# The script created by Jiaxuan Wang 20210712
# Usage:
# [-h]: The help document:
# [-i]: The script only support a file input ,
# the file can be fastq or fasta

所有过程均在centos 7.0集群上和本地的Macos上测试。理论上Windows的WSL也是可以运行的。欢迎尝试!

如果你已经上述运行成功,就不用看下面,下面简述只是把步骤分解重复一遍。

分解步骤(学习目的)

如果想看原汁原味的这个小脚本的安装过程,可以看如下内容,做个简单的分解,交流学习一下。

但是如果安装下面方法操作,最好重新开始操作。避免报错。

step01 🍐

先创建一个文件夹,还是将Github下载的文件放入其中,然后在终端进行操作,在centos 7.0和Mac os亲测成功。 `

# 下载在新建的文件中
mkdir fq_stat
cd fa_stat
unzip fq.zip
ls 
# Makefile    kseq.h      kseq_test.c parse.c     test.fq.gz
# 解压后会发现其中有四个文件,sh是我自己写的,不是原来的

step02 🍑

解压后,还是在刚刚创建,解压的文件中,用gcc编译,输入

gcc -o fastq_stat parse.c -lz
# 没有报错就是安装成功
ls 
# Makefile    fastq_stat  kseq.h      kseq_test.c parse.c     test.fq.gz

step03 🍓

这个时候就会发现gcc编译后出现了一个新的文件fastq_stst,这是一个可执行文件,简单测试下效果:

./fastq_stat test.fq.gz
# 10	1000	964	886	411

输出结果的意思分别是,reads数目,碱基数目,Q20的碱基数目,Q30的碱基数目,以及是G或者C的碱基数目(GC含量)。

但其实这个这个结果并不人性化,可以简单利用awk命令来更改下输出

#!bin/sh
./fastq_stat test.fq.gz | awk '{print $1,$2,$3"("$3/$2*100"%)",$4"("$4/$2*100"%)",$5"("$5/$2*100"%)"}'
# 10 1000 964(96.4%) 886(88.6%) 411(41.1%)

这样一来输出结果就好认识多了。以上就是我做的所有优化的分分解过程。其实就是:

  1. 优化安装过程
  2. sh脚本中输出fastq_stat文件的绝对路径。意味着fastq_stat.sh的脚本就算你移出这个文件,放在自己其他工作目录下,fastq_stat.sh依然可以运作。甚至可以将软件目录当成变量放入.bashrc中,随时可以用bash $xxx/fastq_stat.sh来调用。方便
  3. 优化输出结果,可以直接使用的那种

哈哈哈,感觉自己做的还不错,Well done!其实就是方便别人的同时,锻炼下自己的代码水平。比如这次文章更新,来回更改,费了不少功夫。但就是为了让其更方便,可以一步安装,使用,用起来更爽,同时自己也进一步更加熟悉了Shell的sed和awk命令。