01 背景
Readfq 是一个用于解析 FASTA/FASTQ 格式的例程集合。它可以无缝解析 FASTA 和多行 FASTQ,界面简单易用。
Readfq 首先在一个 C 头文件中实现,然后移植到 Lua、Perl 和 Python,作为单个函数,代码行数少于 50 行。对于脚本语言的用户,建议直接复制粘贴函数,而不是将 readfq 作为库使用。避免不必要的库依赖始终是一个好习惯。
Readfq 还追求效率。C 实现是最快的(如果不是最快的话)。Python 和 Perl 实现比官方的 Bio* 实现快几倍到几十倍。
02 参考
https://github.com/lh3/readfq #官网
03 安装
git clone https://github.com/lh3/readfq.git
wget -c https://github.com/lh3/readfq/archive/refs/heads/master.zip
zip
readfq XXX_R1.fastq.gz
04 使用及常用命令行
统计fastq文件的reads数目和碱基数目
#!/bin/bash
for i in $(find SRR*)
do
printf $i"\t" >> result.txt; kseq_fastq_base $i >> result.txt
done
```perl
# Perl
my @aux = undef; # 这是用于保存中间数据
while (my ($name, $seq, $qual) = readfq(\*STDIN, \@aux)) { print "$seq\n"; }
```
```python
# Python: 生成器函数
for name, seq, qual in readfq(sys.stdin): print(seq)
```
```lua
-- Lua: 闭包
for name, seq, qual in readfq(io.stdin) do print(seq) end
```
```go
/* Go */
package main
import (
"fmt"
"bufio"
"github.com/drio/drio.go/bio/fasta"
)
func main() {
var fqr fasta.FqReader
fqr.Reader = bufio.NewReader(os.Stdin)
for r, done := fqr.Iter(); !done; r, done = fqr.Iter() {
fmt.Println(r.Seq)
}
}
```
```c
/* C */
#include <zlib.h>
#include <stdio.h>
#include "kseq.h"
KSEQ_INIT(gzFile, gzread)
int main() {
gzFile fp;
kseq_t *seq;
fp = gzdopen(fileno(stdin), "r");
seq = kseq_init(fp);
while (kseq_read(seq) >= 0) puts(seq->seq.s);
kseq_destroy(seq);
gzclose(fp);
return 0;
}
```
一些简单的基准测试结果:将包含 2500 万个 100bp 读数的 FASTQ 转换为 FASTA,FASTX-Toolkit(仅解析 4 行 FASTQ)耗时 325.0 CPU 秒,EMBOSS 的 seqret 耗时 247.8 秒。 seqtk 使用 kseq.h 库完成任务只需 24.6 秒,快了 10 倍。从同一个 FASTQ 中按名称检索 25000 个序列,BioPython 耗时 963 秒,而 readfq.py 耗时 136 秒;BioPerl 超过 40 分钟(被终止),而 readfq.pl 仅耗时 273 秒。Seqtk 耗时 29 秒。
推荐,seqtk等优化软件代替此脚本。
SeqKit v2.5.1 (bioinfomatics tools-003)
seqtk安装与使用-seqtk-1.4(bioinfomatics tools-012)
06 参考文献
W Shen, S Le, Y Li*, F Hu*. SeqKit: a cross-platform and ultrafast toolkit for FASTA/Q file manipulation. PLOS ONE. doi:10.1371/journal.pone.0163962.
孟倩.基于高通量测序的短序列生物数据压缩研究[J].计算机应用与软件,2017,34(04):22-27+98.
Shen, W., Le, S., Li, Y., & Hu, F. (2016). SeqKit: A Cross-Platform and Ultrafast Toolkit for FASTA/Q File Manipulation. PloS one, 11(10), e0163962. https://doi.org/10.1371/journal.pone.0163962
桂元苗. 面向蛋白互作预测的序列数据特征识别研究[D]. 中国科学技术大学, 2019. DOI:10.27517/d.cnki.gzkju.2019.000074.
孙佳伟. 基于核酸序列功能修饰位点的识别研究[D]. 江苏科技大学, 2018.
汪俊. 我国养殖太平洋牡蛎中诺瓦克样病毒的检测及部分核酸序列的分析[D]. 中国海洋大学, 2005.