第4章:BLAST命令行基础——五兄弟各显神通

好,我们现在正式进入实操环节。

前面聊了这么多理论,你肯定手痒了——到底怎么跑BLAST?

我刚开始接触BLAST时,面对一大串程序名,心里直犯嘀咕:blastn、blastp、blastx、tblastn、tblastx……这也太多了,到底用哪个?

说白了,这五个程序就是BLAST家族的「五兄弟」。各有各的本事,也各有各的适用场景。选错了,要么跑不出结果,要么结果没意义。

嗯,咱们一个一个来看。先画张图,把这五兄弟的关系理清楚。

核心思路:选哪个程序,取决于你的查询序列类型(DNA还是蛋白质)和目标数据库类型(DNA还是蛋白质)。就这么简单。

BLAST五兄弟核心逻辑 查询序列 (Query) DNA 或 蛋白质 目标数据库 (DB) DNA 或 蛋白质 如何选? DNA → DNA blastn 蛋白质 → 蛋白质 blastp DNA(翻译) → 蛋白质 blastx 蛋白质 → DNA(翻译) tblastn DNA(翻译) → DNA(翻译) tblastx 关键提示 • 同类型:直接用原语言比对(blastn, blastp) • 跨类型:需要先翻译(blastx, tblastn, tblastx)

快速记忆法:程序名中的「n」代表核酸(DNA),「p」代表蛋白质(protein)。tblastx 这种名字里带两个字母的,说明两边都翻译了。记住这个规律,你就不会选错。

4.1 blastn:核酸比对核酸,最常用的工具

说起blastn,它是我用得最多的一个。做基因组注释、找同源序列、鉴定未知片段,第一个想到的就是它。

它的逻辑很简单:拿你的DNA/RNA序列,去和DNA数据库里的序列逐段比较。

核心用法示例:

blastn -query my_unknown_sequence.fa \
       -db nt \
       -out blastn_output.txt \
       -outfmt 6 \
       -evalue 1e-5 \
       -num_threads 4

这个命令我解释一下参数:

  • -query: 你的查询序列文件(FASTA格式)
  • -db: 你要搜的数据库(这里是NCBI的nt库)
  • -out: 结果文件名
  • -outfmt 6: 表格格式输出。我个人习惯用6,好解析。
  • -evalue: E值阈值。1e-5是业界常用标准。
  • -num_threads: 用几个CPU核。服务器上我一般开满。

踩过的坑:我曾经在跑大规模blastn时,忘了加 -num_threads,结果单核跑了一整天。加上并行参数后,同样的任务20分钟搞定。千万别省这一步。

4.2 blastp:蛋白质对蛋白质,进化分析的利器

如果你手里有条蛋白质序列,想看看它在其他物种里有没有亲戚,就用blastp。

相比核酸,蛋白质序列在进化上更保守。你想想看,DNA每隔几百万年就变一次,但蛋白质的核心功能域可能上亿年都没变。所以做远缘物种比对时,blastp往往比blastn更有说服力。

核心用法示例:

blastp -query protein_query.fa \
       -db nr \
       -out blastp_output.txt \
       -outfmt 6 \
       -evalue 1e-5 \
       -max_target_seqs 100

注意这里多了个 -max_target_seqs。为什么用这个?

因为蛋白质数据库太大,不限制的话结果文件可能会膨胀到几GB。我之前试过跑一个全库blastp,忘了限制输出条数,结果文件大到没法打开。嗯,很惨的回忆。

实战技巧:做蛋白质功能注释时,我建议先用 -outfmt 6 跑一遍,拿到初步结果。然后用 sort | uniq 统计注释频次,找出主要功能类别。效率很高。

4.3 blastx:DNA翻译后搜蛋白质库,发现隐藏的基因

blastx 是我最喜欢的程序之一。为什么?

你有一段未知DNA序列,可能是新基因。直接跑blastn可能啥也找不到——因为DNA序列变异太大。但如果你先把DNA翻译成蛋白质,再用蛋白序列去比对,往往能找到蛛丝马迹。

核心用法示例:

blastx -query unknown_genomic.fa \
       -db nr \
       -out blastx_output.txt \
       -outfmt 6 \
       -evalue 1e-3 \
       -num_threads 8

注意E值:我给了1e-3,比blastn的1e-5宽松一些。为什么会这样?因为翻译过程中存在移码和终止子污染,比对本身就有天然噪声。太严格的话,可能把真实匹配也过滤掉了。

适用场景:EST序列分析、宏基因组功能注释、新物种基因预测——这几类任务我都首选blastx。你试试看,效果很明显。

4.4 tblastn:蛋白探针在DNA数据库里捞基

tblastn和blastx正好反过来。

你手里有某个保守蛋白质序列(比如某个酶的功能域),你想在一条染色体或者一个基因组上找类似的编码区域。这时候就用tblastn。

它会将你的蛋白质序列,和数据库里每条DNA序列的6框翻译结果逐一比对。

核心用法示例:

tblastn -query kinase_domain.fa \
        -db genome.fasta \
        -out tblastn_output.txt \
        -outfmt 6 \
        -evalue 1e-10

性能陷阱:tblastn对每条DNA都要做6框翻译再比对,计算量是blastn的6倍以上。我曾经在32核服务器上跑全基因组tblastn,花了3天。建议尽量缩小数据库范围,或者用-seg过滤低复杂度区域来加速。

4.5 tblastx:最慢但最敏感,跨物种的最后手段

tblastx 是五兄弟里最笨重的一个。它把查询序列和目标数据库都翻译成蛋白质,再做蛋白-蛋白比对。

为什么需要它?

当两段DNA序列在核酸层面差异太大(比如人和细菌的某个同源基因),blastn完全对不上。但翻译成蛋白质后,功能域可能还有几分相似。tblastx就是抓住这「几分相似」的最后手段。

核心用法示例:

tblastx -query human_lncRNA.fa \
        -db zebrafish_genome.fa \
        -out tblastx_output.txt \
        -outfmt 6 \
        -evalue 1e-5 \
        -num_threads 16

一句话总结:tblastx够敏感,够慢,够费内存。只有在blastn和blastx都找不到结果时,才使出这招。

4.6 五兄弟参数速查表

程序 查询类型 数据库类型 比对方式 典型场景 推荐E值
blastn DNA DNA 核酸-核酸 同源基因、标记鉴定 1e-5
blastp 蛋白质 蛋白质 蛋白-蛋白 功能注释、进化分析 1e-5
blastx DNA 蛋白质 DNA(翻译)-蛋白 新基因预测、宏基因组 1e-3 ~ 1e-5
tblastn 蛋白质 DNA 蛋白-DNA(翻译) 基因组上的功能域定位 1e-5 ~ 1e-10
tblastx DNA DNA DNA(翻译)-DNA(翻译) 远缘跨物种、lncRNA 1e-5

4.7 实战选择原则

写到这里,我感觉你应该能快速判断了。但为了保险,我给你一个简单的决策流程:

  1. 先判断序列类型:你手里是DNA还是蛋白质?
  2. 再判断数据库类型:目标是核酸库还是蛋白库?
  3. 同类型直接比对:DNA-DNA → blastn;蛋白-蛋白 → blastp
  4. 跨类型先翻译:DNA搜蛋白 → blastx;蛋白搜DNA → tblastn
  5. 两边都翻译:仅当blastn和blastx都不出结果时用tblastx

总结一下:选程序就是三个问题——你的序列是什么?数据库是什么?你想找多远的亲戚?回答清楚这三个问题,你就能在五兄弟里挑出最合适的那一个。

下一节,我们讲如何把今天这些命令行整合到可重复计算工作流里。你会看到,写脚本管好这些命令,比手动敲有效率得多。