seqkit:FASTA/FASTQ序列处理

763 字
4 分钟
seqkit:FASTA/FASTQ序列处理

seqkit 是用 Go 写的 FASTA/FASTQ 处理工具,处理 50GB 序列文件比手写 awk 快近 10 倍。本文覆盖 seqkit 最高频的 8 个场景:统计、过滤、抽样、格式转换、序列提取。全部在 Debian 12 上实测。

1. 安装与验证#

Terminal window
conda install -c bioconda seqkit -y
seqkit version
# seqkit v2.13.0

2. stats——拿到FASTQ第一件事#

这是我最常用的 seqkit 命令,比 FastQC 快但给出最核心的信息:

Terminal window
seqkit stats *.fastq.gz

输出:

file format type num_seqs sum_len min_len avg_len max_len
sample_R1.gz FASTQ DNA 30,000 4,500,000 150 150.0 150
sample_R2.gz FASTQ DNA 30,000 4,500,000 150 150.0 150
含义关注点
num_seqs总序列数双端文件应该相等
sum_len总碱基数换算测序量
min_len/max_len长度范围发现异常短/长 reads
avg_len平均长度确认 read 类型

如果 min_len 远小于 avg_len——说明有严重降解或接头污染,需要先跑 fastp。

3. 序列过滤——按长度、质量、名称#

Terminal window
# 过滤≥100bp的序列
seqkit seq -m 100 input.fastq.gz -o long.fastq.gz
# 过滤≤1000bp的序列(保留短的)
seqkit seq -M 1000 input.fastq.gz -o short.fastq.gz
# 只保留ATCG组成的序列(去掉含N的)
seqkit grep -s -r -p "^[ATCG]+$" input.fasta -o clean.fasta
# 按名称过滤(正则匹配)
seqkit grep -n -r -p "chr1" genome.fa -o chr1.fa

4. 抽样——大文件测试时的救星#

分析 500GB 的全基因组数据前,先抽取 1% 跑一遍验证流程:

Terminal window
# 按比例抽样(1%)
seqkit sample -p 0.01 input.fastq.gz -o sample.fastq.gz
# 按数量抽样(取10000条)
seqkit sample -n 10000 input.fastq.gz -o sample_10k.fastq.gz
# 设置随机种子(保证可重复)
seqkit sample -n 10000 -s 42 input.fastq.gz -o sample_10k.fastq.gz

-s 设置随机种子的重要性: 审稿人可能问你”怎么抽样的”,有种子就能精确复现。

5. 格式转换——FASTA↔FASTQ#

Terminal window
# FASTQ → FASTA(丢掉质量信息)
seqkit fq2fa input.fastq.gz -o output.fasta
# FASTA → FASTQ(质量全设为最高,仅测试用)
seqkit fa2fq input.fasta -o output.fastq.gz

6. 序列提取——按ID列表批量取#

Terminal window
# 从id_list.txt提取对应的序列
seqkit grep -n -f id_list.txt input.fasta -o subset.fasta
# 排除这些ID(反向选择)
seqkit grep -n -v -f exclude.txt input.fasta -o filtered.fasta

id_list.txt 格式一行一个 ID,不需要 > 前缀。

7. 序列去重与排序#

Terminal window
# 按序列去重(保留第一条)
seqkit rmdup -s input.fasta -o dedup.fasta
# 按名称排序
seqkit sort -n input.fasta -o sorted.fasta
# 按序列长度排序(从长到短)
seqkit sort -l -r input.fasta -o by_length.fasta

8. 碱基组成统计#

Terminal window
seqkit fx2tab -n -g -c input.fasta
# 输出:序列ID 序列 GC含量
# 只看GC含量
seqkit fx2tab -n -g -c input.fasta | awk '{print $1, $NF}'

9. 踩坑#

坑1:gzip文件需要额外处理吗? 不需要。seqkit 自动识别 .gz 后缀并解压,直接喂就行。

坑2:输出文件格式 seqkit 默认根据 -o 参数的后缀自动选格式(.gz=压缩,.fa=FASTA,.fq=FASTQ)。

坑3:大文件 grep 很慢 seqkit grep -n -f big_list.txt 在大文件上比 seqtk subseq 慢。如果列表很大(>10万条),用 seqtk 更快。

10. 小结#

场景命令比awk快多少
快速统计seqkit stats5-10x
按长度过滤seqkit seq -m 1003-5x
抽样seqkit sample -p 0.110x+
格式转换seqkit fq2fa2-3x
序列提取seqkit grep -n -f list3-5x

本文于 2025-04-01 在 Debian 12 上实测,seqkit v2.13.0。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

seqkit:FASTA/FASTQ序列处理
https://fg.ink/posts/seqkit-fasta-fastq-processing/
作者
风观
发布于
2025-03-15
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
风观
风有来路,观有所思
分类
标签
站点统计
文章
50
分类
1
标签
29
总字数
61,837
运行时长
0
最后活动
0 天前

文章目录