【发布时间】:2018-01-25 13:03:54
【问题描述】:
我正在尝试创建一个规则来在snakemake 中实现bedtools,这将closest 一个文件与另一个目录中的一堆文件。
我有的是,在/home/bedfiles目录下,20个床位文件:
1A.bed , 2B_83.bed , 3f_33.bed ...
我想要的是,/home/bedfiles目录下,20个修改过的床文件:
1A_modified, 2B_83_modified , 3f_33_modified ...
所以 bash 命令是:
filelist='/home/bedfiles/*.bed'
for mfile in $filelist;
do
bedtools closest -a /home/other/merged.txt -b ${mfile} > ${mfile}_modified
所以这个命令会在/home/bedfiles 目录中生成带有_modified 扩展名的文件。
我想用Snakemake 来实现它,但是我一直遇到语法错误,我不知道如何修复。我的试验是:
Step1:获取目录下的第一部分bed文件
FIRSTPART = [f.split(".")[0] for f in os.listdir("/home/bedfiles") if f.endswith('.bed')]
第 2 步:定义输出名称和文件夹
MODIFIED = expand("/home/bedfiles/{first}_modified", first=FIRSTPART)
第三步:写在rule all:
rule all:
input: MODIFIED
第 4 步:制定特定规则以实施“最近的床具”
rule closest:
input:
input1 = "/home/other/merged.txt" , \
input2 = expand("/home/bedfiles/{first}.bed", first=FIRSTPART)
output:
expand("/home/bedfiles/{first}_modified", first=FIRSTPART)
shell:
""" bedtools closest -a {input.input1} -b {input.input2} > {output} """
它在规则所有输入的行抛出错误:
invalid syntax
你知道如何克服这个错误或任何其他方式来实现它吗?
PS : 无法一一写出文件名。
【问题讨论】: