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

如何用循环与条件语句批量运行EagleC的predictSV命令?

解决.mcool文件批量运行EagleC predictSV的问题

正确批量处理脚本

以下是可以直接使用的bash脚本,包含完整的逻辑判断与命令执行:

#!/bin/bash

# 遍历当前目录下所有.mcool文件(如需递归子目录,见下方补充)
for mcool_file in *.mcool; do
    # 提取.mcool扩展名前的字符串作为id
    id="${mcool_file%.mcool}"
    
    # 提取id最后一个/后的子串(兼容带路径的文件名)
    last_part="${id##*/}"
    
    # 判断是否为目标分辨率数值
    if [[ "$last_part" =~ ^(5000|10000|50000)$ ]]; then
        # 替换为你的实际EagleC predictSV单文件命令模板
        EagleC predictSV --input "$mcool_file" --output "${id}_sv_pred_result.txt"
        # 可选:打印执行日志,方便调试跟踪
        echo "已完成处理: $mcool_file"
    fi
done

关键逻辑说明

  1. 文件遍历:for mcool_file in *.mcool 精准遍历当前目录下的.mcool文件,避免混入其他无关命令输出。
  2. ID提取:用bash参数扩展${mcool_file%.mcool} 安全去掉文件后缀,不会受路径空格或特殊字符影响。
  3. 分辨率判断:${id##*/} 提取路径最后一段内容,再通过正则匹配严格判断是否为5000/10000/50000,避免误匹配类似500000的数值。
  4. 命令执行:所有变量用双引号包裹,防止路径含空格时命令解析错误。

针对你之前问题的排查点

你提到测试循环时输出包含cooler、ls及文件路径,说明之前的循环写法存在以下问题:

  • 错误将ls *.mcool与其他命令的输出混合作为循环输入,比如写成for file in $(ls *.mcool | cooler ...),导致变量被分割成无效片段。
  • 未正确处理带路径的文件名,导致分辨率判断逻辑失效,进而没有触发EagleC命令。
  • 变量未加双引号,路径含空格时命令直接执行失败且无输出。

递归遍历子目录的补充脚本

如果需要处理子目录下的.mcool文件,改用find命令实现递归遍历:

find . -name "*.mcool" -type f | while read -r mcool_file; do
    id="${mcool_file%.mcool}"
    last_part="${id##*/}"
    if [[ "$last_part" =~ ^(5000|10000|50000)$ ]]; then
        EagleC predictSV --input "$mcool_file" --output "${id}_sv_pred_result.txt"
        echo "已完成处理: $mcool_file"
    fi
done

调试建议

  1. 在循环内添加echo "当前文件: $mcool_file,ID: $id,分辨率片段: $last_part",确认变量值是否符合预期。
  2. 先手动执行单个文件的EagleC命令,确认命令本身能正常输出结果,排除命令自身问题。
  3. 给脚本添加执行权限:chmod +x batch_eaglec.sh,再通过./batch_eaglec.sh运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:27:45