Я пытаюсь создать правило для реализации bedtools
в snakemake
, которое будет 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
Таким образом, эта команда создаст файлы с расширением _modified
в каталоге /home/bedfiles
.
Я хочу реализовать это с помощью Snakemake
, однако у меня все еще возникает синтаксическая ошибка, которую я не знаю, как исправить. Мое испытание:
Шаг 1. Получение первой части постельных файлов в каталоге
FIRSTPART = [f.split(".")[0] for f in os.listdir("/home/bedfiles") if f.endswith('.bed')]
Шаг 2. Определение имени и папки вывода
MODIFIED = expand("/home/bedfiles/{first}_modified", first=FIRSTPART)
Шаг 3. Написание этого на 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} """
И это выдает мне ошибку в строке для правила all, input:
invalid syntax
Вы знаете, как обойти эту ошибку или каким-либо другим способом ее реализовать?
PS: Записать имена файлов по очереди невозможно.