seqtkrs 是 seqtk 的 Rust 重新实现,seqtk 是一个快速轻量的生物序列(FASTA/FASTQ格式)处理工具集。
- 🚀 高性能:利用 Rust 的零成本抽象和内存安全特性
- 🔄 完全兼容:与原始 C 语言实现的算法保持兼容
- 📦 易于安装:通过 Cargo 一键安装,无需额外依赖
- 🗜️ 自动压缩检测:无缝支持 gzip 和 bzip2 压缩文件
- 🧬 全功能:实现了原版 seqtk 的全部 24 个命令
git clone https://github.com/sheny-bio/seqtkrs.git
cd seqtkrs
cargo build --release编译后的二进制文件位于 target/release/seqtkrs。
cargo install --path .# 查看帮助信息
seqtkrs --help
# 查看特定命令的帮助
seqtkrs seq --help# 将 FASTQ 转换为 FASTA
seqtkrs seq -a input.fq.gz > output.fa
# 将 Illumina 1.3+ FASTQ 转换为 FASTA,并将质量值低于 20 的碱基转为小写
seqtkrs seq -aQ64 -q20 input.fq > output.fa
# 将多行 FASTQ 转换为 4 行格式
seqtkrs seq -l0 input.fq > output.fq
# 折叠长序列行并移除注释
seqtkrs seq -Cl60 input.fa > output.fa# 反向互补
seqtkrs seq -r input.fq > output.fq
# 提取指定名称的序列(每行一个序列名)
seqtkrs subseq input.fq names.txt > output.fq
# 提取 BED 文件指定区域的序列
seqtkrs subseq input.fa regions.bed > output.fa
# 将 BED 区域的碱基转为小写
seqtkrs seq -M regions.bed input.fa > output.fa# 从双端测序文件中随机采样 10000 对读段(使用相同的随机种子保持配对)
seqtkrs sample -s100 read1.fq 10000 > sub1.fq
seqtkrs sample -s100 read2.fq 10000 > sub2.fq# 使用 Phred 算法修剪低质量碱基
seqtkrs trimfq input.fq > output.fq
# 从左端修剪 5bp,从右端修剪 10bp
seqtkrs trimfq -b5 -e10 input.fa > output.fa
# 生成 FASTQ 质量统计报告
seqtkrs fqchk input.fq > report.txt# 计算 GC 含量
seqtkrs gc input.fa > gc_content.txt
# 查找端粒重复序列 (TTAGGG)n
seqtkrs telo seq.fa > telo.bed 2> telo.count
# 统计序列长度
seqtkrs size input.faseqtkrs 实现了原版 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 缓冲区提供最佳吞吐量
# 运行所有测试
cargo test
# 运行特定测试
cargo test test_name
# 显示测试输出
cargo test -- --nocapture# 格式化代码
cargo fmt
# 运行 Clippy 静态检查
cargo clippy -- -D warnings
# 生成文档
cargo doc --opencargo benchsrc/
├── 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 命令实现
- 命令行接口:使用
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