seqtkrs
seqtkrs 是 seqtk 的 Rust 重新实现,seqtk 是一个快速轻量的生物序列(FASTA/FASTQ格式)处理工具集。
特性
- 🚀 高性能:利用 Rust 的零成本抽象和内存安全特性
- 🔄 完全兼容:与原始 C 语言实现的算法保持兼容
- 📦 易于安装:通过 Cargo 一键安装,无需额外依赖
- 🗜️ 自动压缩检测:无缝支持 gzip 和 bzip2 压缩文件
- 🧬 全功能:实现了原版 seqtk 的全部 24 个命令
安装
从源码构建
编译后的二进制文件位于 target/release/seqtkrs。
使用 Cargo 安装
快速开始
基本用法
# 查看帮助信息
# 查看特定命令的帮助
常用示例
序列格式转换
# 将 FASTQ 转换为 FASTA
# 将 Illumina 1.3+ FASTQ 转换为 FASTA,并将质量值低于 20 的碱基转为小写
# 将多行 FASTQ 转换为 4 行格式
# 折叠长序列行并移除注释
序列操作
# 反向互补
# 提取指定名称的序列(每行一个序列名)
# 提取 BED 文件指定区域的序列
# 将 BED 区域的碱基转为小写
序列采样
# 从双端测序文件中随机采样 10000 对读段(使用相同的随机种子保持配对)
质量控制
# 使用 Phred 算法修剪低质量碱基
# 从左端修剪 5bp,从右端修剪 10bp
# 生成 FASTQ 质量统计报告
序列分析
# 计算 GC 含量
# 查找端粒重复序列 (TTAGGG)n
# 统计序列长度
支持的命令
seqtkrs 实现了原版 seqtk 的全部 24 个命令:
| 命令 | 功能描述 |
|---|---|
seq |
常见的序列格式转换和操作 |
sample |
随机采样序列 |
subseq |
提取指定名称或区域的序列 |
trimfq |
修剪 FASTQ 文件的低质量碱基 |
fqchk |
FASTQ 质量统计 |
comp |
计算序列组成 |
mergepe |
合并双端测序的两个 FASTQ 文件 |
dropse |
从双端数据中删除单端读段 |
split |
将序列文件分割为多个文件 |
rename |
重命名序列 |
mutfa |
在 FASTA 序列中引入随机突变 |
mergefa |
合并两个 FASTA 文件 |
famask |
使用 BED 文件掩码 FASTA 序列 |
gc |
计算 GC 含量 |
hety |
计算杂合度 |
cutN |
在 N 碱基处切割序列 |
gap |
查找序列中的 gap(N 区域) |
hpc |
同聚物压缩 |
hrun |
查找同聚物 |
telo |
查找端粒重复序列 |
kfreq |
k-mer 频率统计 |
listhet |
列出杂合位点 |
randbase |
生成随机碱基序列 |
size |
统计序列长度 |
性能
seqtkrs 在保持与原版 seqtk 算法兼容的同时,利用 Rust 的性能优势:
- 内存安全:无需担心缓冲区溢出或内存泄漏
- 零成本抽象:高级抽象不会带来运行时开销
- 并行处理:部分命令支持多线程并行处理
- 优化的 I/O:16KB 缓冲区提供最佳吞吐量
开发
运行测试
# 运行所有测试
# 运行特定测试
# 显示测试输出
代码检查
# 格式化代码
# 运行 Clippy 静态检查
# 生成文档
性能基准测试
项目结构
src/
├── core/ # 基础层:I/O、数据结构、查找表
│ ├── seq_reader.rs # FASTA/FASTQ 读取器
│ ├── seq_writer.rs # FASTA/FASTQ 写入器
│ ├── seq_record.rs # 序列记录数据结构
│ └── tables.rs # 碱基转换查找表
├── utils/ # 工具层:随机数、区域解析、质量值处理
├── algorithms/ # 算法层:Mott 修剪、采样、X-dropoff
└── commands/ # 命令层:24 个 CLI 命令实现
与原版 seqtk 的差异
- 命令行接口:使用
clap提供更现代的 CLI 体验 - 错误处理:使用 Rust 的
Result类型提供更清晰的错误信息 - 代码组织:模块化设计,便于维护和扩展
贡献
欢迎贡献!请随时提交 Issue 或 Pull Request。
许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
致谢
- 原始 seqtk 项目由 Heng Li 开发
- 感谢 Rust 社区提供的优秀工具和库
参考
- 原版 seqtk: https://github.com/lh3/seqtk
- FASTA 格式: https://en.wikipedia.org/wiki/FASTA_format
- FASTQ 格式: https://en.wikipedia.org/wiki/FASTQ_format