拿到一个 FASTA 或 GTF,想快速知道里面有多少条序列、某个基因在不在、某个模式出现几次——专门写脚本太重,用文本编辑器打开又太大、几个 G 直接卡死。这种时候 grep 就是最趁手的瑞士军刀,一行命令秒出结果。它不挑文件格式、不用先排序,常用参数也就那么几个,记住了 FASTA、GTF、VCF 哪类文本都能搜。这一讲把 grep 在生信文本里的常用法一次理清:基础检索、计数定位、跨文件搜索、以及用在 GTF 和 VCF 上,配一个小 FASTA 示例照着就能用。
grep 为什么趁手
比对、注释、变异文件本质都是文本。grep 不用加载整个文件、不挑格式,几 G 的文件也能秒搜。记住几个常用参数就够应付日常检索。
核心命令速查
下面按「基础检索 / 计数定位 / 跨文件 / GTF-VCF」分组,配套小 FASTA 在 testdata 里:
#!/bin/bash# grep 在生信文本里的常用命令速查,按需复制FA=testdata/test.fa# ---- 基础检索 ----grep -c "^>""$FA"# 数序列条数(FASTA 头以 > 开头)grep "^>""$FA"# 列出所有序列名grep -n "^>""$FA"# 带行号列出grep -v "^>""$FA"# 只看序列(排除头行)grep -w "gene=KRAS""$FA"# 全词匹配,防 KRAS 误配 KRAS2grep -i "atg""$FA"# 忽略大小写# ---- 计数 / 定位 ----grep -o "ATG""$FA" | wc -l # 统计某模式出现总次数grep -B1 "N""$FA"# 带出上一行(含 N 序列的名字)grep -A1 "TP53""$FA"# 带出下一行(该序列)grep -E "TP53|EGFR|KRAS""$FA"# 多模式(扩展正则)grep -P "A{4,}""$FA"# PCRE:连续 4 个以上 Agrep --color=auto "ATG""$FA"# 高亮匹配项# ---- 跨文件 ----grep -l "TP53" testdata/*.fa # 列出含匹配的文件名grep -r "TP53" testdata/ # 递归搜整个目录grep -f patterns.txt "$FA"# 从文件读多个模式批量搜# ---- 用在 GTF / VCF ----grep -w "TP53" genes.gtf # GTF 里找某基因所有行grep -P "\tgene\t" genes.gtf # GTF 只看 gene 类型行grep -v "^#" sample.vcf # VCF 跳过表头grep -c -v "^#" sample.vcf # 数变异条数grep "PASS" sample.vcf # 只看通过过滤的变异
^> 锁 FASTA 头;-w 全词防误配;-B1/-A1 带出上/下一行;-o+wc -l 数模式次数;-v 反向匹配。
示例的输出日志
对示例 FASTA 跑几个代表命令,结果如下:
序列条数:5序列名:>seq1 gene=TP53>seq2 gene=EGFR>seq3 gene=KRAS>seq4 gene=BRCA1>seq5 gene=MYC找 KRAS:>seq3 gene=KRAS含 N 的序列(带名字):>seq4 gene=BRCA1ATGGATTTATCTGCTCTTCGCNNNNGTTGGAAGGCTTTTATG 出现次数:7多模式 TP53/EGFR:>seq1 gene=TP53>seq2 gene=EGFROK
序列条数、序列名、KRAS、含 N 的 BRCA1、ATG 次数、多模式——检索结果一目了然。
扩展:接成统计流水线
grep 抽出来的东西接 sort/uniq,就是一条快速统计流水线:
# 抽出所有基因名并去重计数grep -o "gene=[A-Z0-9]*" testdata/test.fa | sort | uniq -c# 统计 GTF 里每种 feature 各有多少行grep -v "^#" genes.gtf | cut -f3 | sort | uniq -c
grep 负责筛、sort/uniq 负责统计,管道一串就是日常最常用的组合(后面 L07 细说)。
避坑指南
- 匹配到一堆不想要的 → 用
-w 全词,或 ^/$ 锚定位置 - 想看上下文 →
-A/-B/-C 带出后/前/前后几行 - 正则特殊字符 → 用
-F 按字面匹配,或反斜杠转义
📦 完整代码 + 测试数据下载
百度网盘链接:https://pan.baidu.com/s/1-AZFgMozh9NvISwTWUdDFg?pwd=l04c
提取码:l04c(代码已实测可直接运行,建议保存到自己网盘)