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

如何用Bash批量为SPADES目录下的contigs.fasta追加对应目录名

原脚本错误点梳理
  • 匹配逻辑错误:for file in *EC18只能匹配名称以EC18结尾的文件/目录,无法覆盖所有EC开头的目标目录,也没有过滤出目录类型的对象
  • 变量语法错误:sample=${file/.fasta} perl -ane 中变量赋值和perl命令未做分隔,且你遍历的是目录而非fasta文件,直接截取.fasta后缀完全不符合当前场景
  • 路径逻辑错误:没有指定对应目录下的contigs.fasta路径,直接调用${sample}.fasta根本找不到目标文件
可用实现脚本

仅需要重命名文件,无需修改序列内容

# 先cd到所有SPADES输出目录的父目录再运行
for dir in EC*-*; do
    # 仅处理存在contigs.fasta的目录,避免报错
    if [ -d "$dir" ] && [ -f "$dir/contigs.fasta" ]; then
        # 直接在原目录下重命名
        mv "$dir/contigs.fasta" "$dir/${dir}-contigs.fasta"
        # 如果需要把所有重命名后的文件统一放到指定目录,把上面的mv替换成下面的cp即可
        # cp "$dir/contigs.fasta" "/pathway/where/files/are/SPADEs/${dir}-contigs.fasta"
    fi
done

需要同时修改fasta序列头为递增NODE编号(匹配你原脚本的perl逻辑)

for dir in EC*-*; do
    if [ -d "$dir" ] && [ -f "$dir/contigs.fasta" ]; then
        sample="$dir"
        perl -ane 'if(/>/){$a++;print ">NODE_$a\n"}else{print}' "$dir/contigs.fasta" > "/pathway/where/files/are/SPADEs/${sample}-contigs.fasta"
    fi
done
注意事项

运行脚本前可以先把mv/perl执行行替换成echo打印执行逻辑,确认目录匹配、输出路径都符合预期后再正式运行,避免误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:03