分享一个统计Q20和Q30的小脚本📦
生信往往会统计fa或者fq文件的reads数目🉑,碱基数目,Q20和Q30,以作为补充材料放在附录。其实平时拿到这个质控的结果,还是挺简单的,用一些质控软件就可以快速得到这类结果。比如fastaqc
或者fastq
等。
当然,这些软件统计指标是质控软件附带的,毕竟质控软件主要还是为了过滤低质量的reads和去接头。那么假设我们现在对已经质控后的fq文件进行了额外的操作,例如去重,或者其他神奇操作😏😏。
那这个时候难道我们要重新输入fastq
再进一波指控吗,仅仅为了四个质控指标。也可以,但就是太麻烦。
当然也可以将额外的fq文件操作放在质控软件分析之前,这样就可以避免这个问题。但是问题在于万一呢,所以单独做质控数目统计。
这个时候,就很需要找一种专门做Q20,Q30计算的小脚本📘,最好是更小,更快速,更便捷🏃🏃。
经过在网上的一番查找,总觉得结果不是很满意,基本英文和中文的搜索结果都是说用C写的kseq.h来进行统计Q20和Q30,但是其中具体步骤言之不详,会浪费不少时间在摸索和尝试上。
我在搜索资料的基础上,进行自己的更改,应该说自己也是一种代码练习了。更改后的脚本,可以一步安装,并且优化输出结果的可读性。另外我自己在安装在集群上,并测试了一下数据结果,其统计结果和fastq
的输出结果是一样的。也证明了该方法的准确性。我做了下包装📦📦。放在自己的Github上,分享给有需要的人。
方法原文链接:
- https://www.programmersought.com/article/47244571262/
- https://www.cnblogs.com/xudongliang/p/5307462.html
- http://lh3lh3.users.sourceforge.net/kseq.shtml
- https://stackoverflow.com/questions/19390245/how-to-parse-a-fasta-file-using-kseq-h
- 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%)
这样一来输出结果就好认识多了。以上就是我做的所有优化的分分解过程。其实就是:
- 优化安装过程
- sh脚本中输出fastq_stat文件的绝对路径。意味着
fastq_stat.sh
的脚本就算你移出这个文件,放在自己其他工作目录下,fastq_stat.sh
依然可以运作。甚至可以将软件目录当成变量放入.bashrc
中,随时可以用bash $xxx/fastq_stat.sh
来调用。方便 - 优化输出结果,可以直接使用的那种
哈哈哈,感觉自己做的还不错,Well done!其实就是方便别人的同时,锻炼下自己的代码水平。比如这次文章更新,来回更改,费了不少功夫。但就是为了让其更方便,可以一步安装,使用,用起来更爽,同时自己也进一步更加熟悉了Shell的sed和awk命令。