求助: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
相关产品推荐
相关产品推荐

