Предполагая, что правило test
дает в выходной файл с именем {f1}.{f2}.txt
, вам нужен механизм, который правильно соединяет пары f1 и f2 и создает список файлов {f1}.{f2}.txt
.
Как вы создаете этот список, зависит от вас, expand
- это просто удобная функция для этого, но, возможно, в этом случае вы можете избежать этого.
Вот очень простой пример:
fin1 = ['A1$', 'A2£', 'B1€', 'B2¥']
fin2 = ['C1', 'C2']
outfiles = []
for x in fin1:
for y in fin2:
## Here you pair f1 and f2. This is a very trivial way of doing it:
if y[1] in x:
outfiles.append('%s.%s.txt' % (x, y))
wildcard_constraints:
f1 = '|'.join([re.escape(x) for x in fin1]),
f2 = '|'.join([re.escape(x) for x in fin2]),
rule all:
input:
outfiles,
rule test:
input:
input_f1 = '{f1}.txt',
input_f2 = '{f2}.txt',
output:
'{f1}.{f2}.txt',
shell:
r"""
cat {input} > {output}
"""
Этот конвейер будет выполнять следующие команды
cat A2£.txt C2.txt > A2£.C2.txt
cat A1$.txt C1.txt > A1$.C1.txt
cat B1€.txt C1.txt > B1€.C1.txt
cat B2¥.txt C2.txt > B2¥.C2.txt
Если вы коснетесь начальных входных файлов с помощью touch 'A1$.txt' 'A2£.txt' 'B1€.txt' 'B2¥.txt' 'C1.txt' 'C2.txt'
, вам следует быть в состоянии запустить этот пример.