批量处理.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
修改说明
- 保留完整分辨率路径:原脚本仅存储分辨率数字,修正后直接存储
cooler ls输出的完整路径,确保--hic-5k等参数使用正确的路径格式。 - 调整-O参数格式:
${mcool_file#*/}:去掉文件路径中第一个/之前的部分,得到文件名主体;${base_name%%.*}:去掉第一个.之后的所有内容,提取出样本名称;- 组合成
EagleC_output/样本名作为输出目录。
- 添加输出目录创建:增加
mkdir -p EagleC_output确保输出目录存在,避免运行时因目录缺失报错。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

