You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Awk打印FASTA文件中CadC基因的前后序列记录?

提取FASTA文件中目标基因及其前后相邻基因的awk方案

核心需求

从FASTA格式的基因注释/序列文件中,提取含Cadmium标记的CadC基因,同时输出其前序、后序相邻基因的完整序列(包括头部注释和碱基序列)。

单文件处理命令

-vRS='>' -vORS='' '
NR==1 {prev=$0; next}
$2~/Cadmium/ {
    if (prev != "") print RS prev;
    print RS $0;
    getline;
    if ($0 != "") print RS $0;
    exit
}
{prev=$0}
' file.ffn > cadc_with_neighbors.txt

多文件批量处理命令

如果要处理多个.ffn文件,并在输出中标记来源文件名,使用以下命令:

-vRS='>' -vORS='' '
FNR==1 {prev=$0; curr_file=FILENAME; next}
$2~/Cadmium/ {
    if (prev != "") print RS curr_file "|" prev;
    print RS curr_file "|" $0;
    getline;
    if ($0 != "") print RS curr_file "|" $0;
}
{prev=$0; curr_file=FILENAME}
' *.ffn > cadc_all_with_neighbors.txt

代码逻辑说明

  • -vRS='>':将FASTA的基因分隔符>设为awk的记录分隔符,每个基因(包括头部注释+序列)会被识别为一个独立记录
  • -vORS='':取消默认输出换行符,避免生成多余空行
  • 用prev变量缓存上一个基因的内容,当匹配到目标CadC基因时:
    1. 输出缓存的前序基因(如果存在)
    2. 输出当前的CadC基因
    3. 通过getline读取下一个基因,输出后序基因(如果存在)
    4. 单文件命令中的exit用于找到第一个CadC后停止处理,若需提取所有CadC实例,删除exit即可

输入输出示例

输入FASTA片段

gene1 hypothetical protein
ATCGATCGATCG
gene2 Cadmium resistance transcriptional regulator CadC
GGATCCGGATCC
gene3 hypothetical protein
TTAGCATTAGCA

期望输出(单文件处理)

gene1 hypothetical protein
ATCGATCGATCG
gene2 Cadmium resistance transcriptional regulator CadC
GGATCCGGATCC
gene3 hypothetical protein
TTAGCATTAGCA

注意事项

  • 确保FASTA格式规范:每个基因头部以>开头,序列部分可换行(awk会自动将整个基因的内容作为一个记录处理)
  • 若目标基因是文件的第一个/最后一个,代码会自动跳过不存在的前序/后序基因,不会输出空内容

内容的提问来源于stack exchange,提问作者tsz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:57:44