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

如何在fasta文件的每个序列头中添加对应文件名?

操作前注意

先备份所有原始fasta文件,避免误操作丢失数据:

mkdir -p fasta_backup && cp *.fasta fasta_backup/

批量处理命令

以下命令均支持自定义是否保留文件名后缀,如果你不需要文件名的后缀(比如文件名是NC_003245.fasta,只想把NC_003245加到序列头),可以选择后缀去除的版本。

1. Linux系统(自带GNU awk,支持原地修改)

直接修改原文件,不会生成额外临时文件:

# 保留文件全名(含后缀)的版本
for file in *.fasta; do
  awk -i inplace -v fname="$file" '{
    if($0 ~ /^>/) {
      print ">" fname " " substr($0,2)
    } else {
      print $0
    }
  }' "$file"
done

# 去除.fasta后缀的版本(和你示例效果完全一致)
for file in *.fasta; do
  fname=${file%.fasta}
  awk -i inplace -v fname="$fname" '{
    if($0 ~ /^>/) {
      print ">" fname " " substr($0,2)
    } else {
      print $0
    }
  }' "$file"
done

2. macOS系统/不想修改原文件的场景

会生成前缀为modified_的新文件,原始文件全程保留不变:

# 去除.fasta后缀的版本
for file in *.fasta; do
  fname=${file%.fasta}
  awk -v fname="$fname" '{
    if($0 ~ /^>/) {
      print ">" fname " " substr($0,2)
    } else {
      print $0
    }
  }' "$file" > "modified_${file}"
done

3. 需要处理子目录下所有fasta文件的场景

用find配合遍历所有层级的子目录:

find . -type f -name "*.fasta" -exec awk -i inplace -v fname="{}" '{
  if($0 ~ /^>/) {
    print ">" fname " " substr($0,2)
  } else {
    print $0
  }
}' {} \;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:30:01