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

批量处理.mcool文件:修正Bash循环调用EagleC predictSV的参数问题

问题描述

.mcool文件包含多分辨率矩阵,通过cooler ls命令可查看文件内的分辨率路径,示例如下:

cooler ls ./../input/A001C007.hg38.nodups.pairs.mcool

./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/200
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/500
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/1000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/2000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/5000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/10000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/20000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/50000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/100000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/250000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/500000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/1000000

需求:遍历./input/*.mcool文件,当cooler ls "$mcool_file"输出的路径以5000、10000或50000结尾时,调用EagleC的predictSV工具,单个文件的调用示例如下:

predictSV --hic-5k SKNAS-MboI-allReps-filtered.mcool::/resolutions/5000 \
          --hic-10k SKNAS-MboI-allReps-filtered.mcool::/resolutions/10000 \
          --hic-50k SKNAS-MboI-allReps-filtered.mcool::/resolutions/50000 \
          -O SK-N-AS -g hg38 --balance-type CNV --output-format full \
          --prob-cutoff-5k 0.8 --prob-cutoff-10k 0.8 --prob-cutoff-50k 0.99999

用户编写的Bash循环脚本输出不符合预期:当前输出仅保留了分辨率数字而非完整路径,且-O参数需要调整为EagleC_output/加上mcool_file中/后的子串(例如EagleC_output/A001C007)。

修正后的脚本
#!/usr/bin/env bash
# 创建输出目录(如果不存在)
mkdir -p EagleC_output

for mcool_file in input/*.mcool; do
  # 初始化变量存储完整分辨率路径
  hic5k_path=; hic10k_path=; hic50k_path=
  
  while IFS= read -r id; do
    id_suffix=${id##*/}
    case $id_suffix in
      5000)  hic5k_path="$id";;
      10000) hic10k_path="$id";;
      50000) hic50k_path="$id";;
    esac
  done < <(cooler ls "$mcool_file")

  # 处理-O参数:提取/后的子串,再去掉第一个.之前的部分
  base_name=${mcool_file#*/}  # 去掉input/前缀,得到A001C007.hg38.nodups.pairs.mcool
  output_dir="EagleC_output/${base_name%%.*}"

  # 构建并输出命令
  echo predictSV \
    ${hic5k_path:+ --hic-5k "$hic5k_path"} \
    ${hic10k_path:+ --hic-10k "$hic10k_path"} \
    ${hic50k_path:+ --hic-50k "$hic50k_path"} \
    -g hg38 \
    -O "$output_dir" \
    --balance-type CNV \
    --output-format full \
    --prob-cutoff-5k 0.8 \
    --prob-cutoff-10k 0.8 \
    --prob-cutoff-50k 0.99999
done
修改说明
  1. 保留完整分辨率路径:原脚本仅存储分辨率数字,修正后直接存储cooler ls输出的完整路径,确保--hic-5k等参数使用正确的路径格式。
  2. 调整-O参数格式:
    • ${mcool_file#*/}:去掉文件路径中第一个/之前的部分,得到文件名主体;
    • ${base_name%%.*}:去掉第一个.之后的所有内容,提取出样本名称;
    • 组合成EagleC_output/样本名作为输出目录。
  3. 添加输出目录创建:增加mkdir -p EagleC_output确保输出目录存在,避免运行时因目录缺失报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:48