3、Trimmomatic基本用法:命令行结构、输入输出文件、运行示例

Trimmomatic 这东西,说白了就是一条命令搞定一套质控流程。但刚接触的人往往卡在参数顺序上,动不动就报错。我刚开始用的时候也栽过跟头,后来摸清了它的脾气,才算真正上手。今天咱们就把它的命令行结构、文件命名规则和典型运行姿势一次性说透。

3.1 命令行骨架

Trimmomatic 的命令格式挺固定的,分单端 (SE) 和双端 (PE) 两种模式。我个人习惯先在脑子里画个草图:输入几个文件,输出几个文件,中间插哪些步骤。你想想看,如果命令写错了,跑半天才发现,多耽误事。

基础模板长这样:

TrimmomaticPE  [输入文件1] [输入文件2] [输出文件1_paired] [输出文件1_unpaired] [输出文件2_paired] [输出文件2_unpaired] [步骤参数...]

TrimmomaticSE  [输入文件] [输出文件] [步骤参数...]

注意:双端模式下,你必须给出四个输出文件名,缺一不可。我曾经见过有人只写了两个,结果程序直接报错退出。

参数含义
TrimmomaticPE双端模式 (Paired‑End)
TrimmomaticSE单端模式 (Single‑End)
输入文件1左端 (R1) FASTQ
输入文件2右端 (R2) FASTQ(PE模式必需)
输出文件*_paired配对成功的 reads
输出文件*_unpaired单端存活(另一半被丢弃)的 reads

3.2 输入输出文件的命名规矩

很多人觉得文件名随便写就行,其实不然。Trimmomatic 严格按照你给的路径读取和写入,不会自动加后缀。我建议你养成一套命名习惯,比如:

  • 原始文件:sample_R1.fastq.gz、sample_R2.fastq.gz
  • 输出文件:sample_R1_trimmed_paired.fastq.gz、sample_R1_trimmed_unpaired.fastq.gz……

这样一看就知道哪些是配对的,哪些是孤儿 reads。嗯,这里要注意:压缩格式必须和实际一致,Trimmomatic 会根据 .gz 后缀自动判断是否用 gzip 读写。要是你文件是 gz 但没写 .gz,它会当纯文本读,速度慢不说,还可能把二进制数据搞乱。

我的小技巧: 用 _paired 和 _unpaired 做后缀,脚本后面处理起来特别省事,grep 一把就能找到。

3.3 一个完整的双端运行示例

拿我最常用的参数组合举个例子。假设我要对肿瘤样本的 FASTQ 做质控,去掉 adapter、切除低质量尾巴、滑动窗口过滤,最后丢弃掉太短的 reads。命令如下:

TrimmomaticPE \
  tumor_R1.fastq.gz tumor_R2.fastq.gz \
  tumor_R1_trimmed_paired.fastq.gz tumor_R1_trimmed_unpaired.fastq.gz \
  tumor_R2_trimmed_paired.fastq.gz tumor_R2_trimmed_unpaired.fastq.gz \
  ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 \
  LEADING:3 \
  TRAILING:3 \
  SLIDINGWINDOW:4:15 \
  MINLEN:36

解释一下:

  • ILLUMINACLIP – 去除 adapter,我这里用 TruSeq3-PE 库。参数 2:30:10 依次是错配数、比对分值阈值、最小匹配长度。记不太清?没关系,我后面会专门讲 adapter 调优。
  • LEADING:3 – 切除开头质量低于 3 的碱基。
  • TRAILING:3 – 切除结尾质量低于 3 的碱基。
  • SLIDINGWINDOW:4:15 – 滑窗大小 4,平均质量低于 15 就切掉。
  • MINLEN:36 – 切除后 reads 不足 36bp 的直接扔掉。

关键点: 步骤的顺序不能乱!Trimmomatic 严格按照命令中写的先后顺序执行。ILLUMINACLIP 通常放第一个,因为 adapter 残留会影响后面质量判断。我一开始把 LEADING 放前面,结果 adapter 没去掉,后面窗口过滤把好序列给切坏了。

3.4 单端模式怎么跑

单端简单很多,只有一对输入输出。我有时处理混池样本或者长片段扩增子时用 SE 模式。示例:

TrimmomaticSE \
  amplicon_R1.fastq.gz \
  amplicon_trimmed.fastq.gz \
  LEADING:3 TRAILING:3 \
  SLIDINGWINDOW:4:20 \
  MINLEN:50

这里我把滑窗阈值设成 20,因为扩增子质量要求高一点。你酌情调整。

3.5 软件执行流程总览

下面这张图概括了 Trimmomatic 双端模式从输入到输出的完整路径。我故意把 "unpaired" 的输出画成虚线,表示它们是孤儿,后续用还是不用得看实验设计。

Trimmomatic PE 流程结构 R1.fastq.gz (左端) R2.fastq.gz (右端) Trimmomatic ILLUMINACLIP LEADING / TRAILING / SLIDINGWINDOW R1_paired (保持配对) R1_unpaired (孤儿) R2_paired (保持配对) 说明: R1 和 R2 各自产出 paired 和 unpaired 文件 unpaired 文件中的 reads 已丢失另一半,可能影响下游分析

3.6 常见坑和你该注意的地方

我曾经踩过的坑:

  • 输出文件路径写错: 有一次我把输出目录写成了不存在的位置,Trimmomatic 不会自动创建目录,直接报错。建议先 mkdir -p 好输出目录。
  • 输入文件顺序搞反: PE 模式下第一个参数必须是 R1,第二个才是 R2。我见过有人颠倒,结果输出的 paired reads 两端完全对不上号。
  • 参数值带空格: 比如 SLIDINGWINDOW:4:15 中不能有空格,否则会被当成新参数。

其实说到底,Trimmomatic 的用法并不复杂,核心就三条:

  1. 记清 PE / SE 的输入输出格式。
  2. 按 adapter → 切头 → 切尾 → 滑窗 → 最小长度的顺序写步骤。
  3. 运行时先在小样本上试跑,确认命令行没问题再批量提交。

我个人习惯写一个 shell 脚本模板,每次改改样本名和参数就行。这样既不容易写错,也方便下次复用。你可以参考下面这个框架:

#!/bin/bash
# trimmomatic_demo.sh

SAMPLE=$1
R1=${SAMPLE}_R1.fastq.gz
R2=${SAMPLE}_R2.fastq.gz
OUTDIR=./trimmed

mkdir -p $OUTDIR

TrimmomaticPE \
  $R1 $R2 \
  $OUTDIR/${SAMPLE}_R1_paired.fastq.gz $OUTDIR/${SAMPLE}_R1_unpaired.fastq.gz \
  $OUTDIR/${SAMPLE}_R2_paired.fastq.gz $OUTDIR/${SAMPLE}_R2_unpaired.fastq.gz \
  ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 \
  LEADING:3 \
  TRAILING:3 \
  SLIDINGWINDOW:4:15 \
  MINLEN:36

调用的时候直接 bash trimmomatic_demo.sh tumor_sample,省心省力。