【发布时间】:2021-07-21 08:39:58
【问题描述】:
我已经搜索了一段时间,this 线程是我得到的最接近的线程,但无法使用我的设置。
我想做什么:
我有一个文本文件,其中每一行都有一个 ID 和一个数据点
1234 data2
5678 data3
...
我想收集与我的配置文件中的某些 ID 对应的行,并将它们写入根据 ID 值(1234 或 5678)命名的自己的文件中
# config.yaml
IDs:
ID1: 1234
ID2: 5678
当我在不使用snakemake 的情况下执行此操作时,我只是在我的bash 脚本中循环遍历ID 列表并为它们获取文本文件,但我无法使用snakemake 完成此操作。
要么我的目标中的通配符有问题,要么我的 expand 函数将所有 ID 提供给 shell 中的 grep 命令,或者当遵循已接受的链接答案时,我得到“缺少规则所有的输入文件:And_Laa A_log”我可以分享我现在拥有的东西,但我认为这样做的正确方法与我拥有的东西相去甚远,它只会让所有人感到困惑:
configfile: "config.yaml"
# Trying to replicate stackoverflow answer
speakers = {
"1": "And_Laa",
"2": "A_log"
}
def get_speaker(wildcards):
# return expand("{speaker}", speaker=config["speakers"])
return speakers[wildcards.speaker]
rule all:
input:
# expand("{speaker}_wav-list", speaker=config[speakers])
expand("{speaker}", speaker=speakers.values())
# Selecting all the audiofiles for the speakers from a very large file
rule select_speaker_files:
input:
wav=config["files"]["wavs"]
output:
speaker="{speaker}_wav-list"
params:
speaker=get_speaker,
shell:
'grep "{params.speaker}" {input.wav} > {output.speaker}'
【问题讨论】:
标签: snakemake