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

求助:Bash循环实现Bedtools Intersect跨文件夹批量比对的脚本问题

使用bedtools intersect实现多文件逐一交叉比对的问题与解决方法

需求

要使用bedtools的intersect工具,让query_beds目录下的每个文件与pgs_beds目录下的所有文件逐一完成交叉比对。

初始脚本

最初编写的Bash脚本如下:

#!/bin/bash

dir=$(pwd)
query=$dir/query_beds
pgs=$dir/pgs_beds

for file in $query/*; do 
   bedtools intersect -wa -wb -a $file -b $pgs/* -c -C -sorted -filenames
done > ${file%.*}-results.txt

bedtools官方用法说明

一个或多个BAM/BED/GFF/VCF格式的“B”文件。如果通过UNIX管道传递B文件,可使用“stdin”。
新特性!!!:-b参数后可跟多个数据库文件,或使用通配符(*)。

问题分析

原脚本中$pgs/*会一次性将所有pgs目录下的文件传入-b参数,无法实现每个query文件与每个pgs文件单独交叉比对的需求,因此需要调整循环结构。

修正后的可用脚本

修改后已成功实现需求的脚本如下:

#!/bin/bash -x
dir=$(pwd)
query=$dir/query_beds
pgs=$dir/pgs_beds
for f in $(ls $query/*.bed); do 
   for g in $(ls $pgs/*); do
      bedtools intersect -wa -wb -a $f -b $g* -C -filenames
   done > $(basename $f .ext).txt
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:15:32