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

技术求助:用Bash+Awk/Sed批量处理FAS文件插入基因名

批量处理FAS文件:将文件名中的基因名插入序列头

嘿,我正好能帮你解决这个批量处理FAS文件的问题!你需要从每个GeneName_something.fas格式的文件名里提取基因名,然后把它加到每个序列头的物种名后面,用连字符分隔对吧?我给你写一个基于Bash+Awk的脚本,直接就能遍历文件夹里的所有FAS文件完成处理。

#!/bin/bash

# 遍历当前目录下所有.fas格式的文件
for fas_file in *.fas; do
    # 如果当前路径不是文件(比如没有匹配到任何.fas文件时),跳过
    [ -f "$fas_file" ] || continue

    # 从文件名中提取基因名:删除从最后一个下划线开始的所有内容(包括.fas后缀)
    # 比如"COX1_align.fas"会提取出"COX1","Gene_Name_raw.fas"会提取出"Gene_Name"
    gene_name="${fas_file%_*}"

    # 使用Awk处理文件:修改所有以>开头的序列头,插入基因名
    # 兼容GNU Awk(Linux默认)的原地修改
    awk -v gene="$gene_name" '
        # 匹配序列头行(以>开头)
        /^>/ {
            # 把>后面的第一个单词(物种名)替换为「物种名-基因名」
            sub(/^>([^ ]+)/, ">\\1-" gene)
        }
        # 输出所有行(修改后的序列头和原序列内容)
        1
    ' -i inplace "$fas_file"

    # 打印处理完成的提示
    echo "✅ 处理完成:$fas_file"
done

针对macOS用户的调整

如果你用的是macOS,系统默认使用BSD Awk,没有-i inplace原地修改选项,把脚本里的Awk行替换成下面这行即可(用临时文件间接修改原文件):

awk -v gene="$gene_name" '/^>/ {sub(/^>([^ ]+)/, ">\\1-" gene)} 1' "$fas_file" > "$fas_file.tmp" && mv "$fas_file.tmp" "$fas_file"

脚本细节说明

  • 遍历逻辑:自动扫描当前文件夹下所有.fas文件,避免无匹配时的错误提示
  • 基因名提取:用Bash的参数扩展${fas_file%_*},完美适配你的GeneName_something.fas命名规则——不管GeneName里有没有下划线,只要后面是_xxx.fas格式,都能正确提取
  • Awk处理:精准匹配序列头行,只在物种名后插入基因名,完全保留原序列内容和序列头的其他注释信息(如果有的话)

使用步骤

  1. 把上面的脚本复制到一个文本文件里,命名为add_gene_to_headers.sh
  2. 打开终端,进入存放.fas文件的文件夹
  3. 给脚本加执行权限:chmod +x add_gene_to_headers.sh
  4. 运行脚本:./add_gene_to_headers.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:57