欢迎关注"生信修炼手册"!
在的中,不再像以前那样给出每个步骤对应的代码,而是直接给出了官方使用的pipeline。这些采用进行编写。
是一种流程编写语言,没有太多复杂的逻辑和语法,入门简单。首先看一个的例子
对于一个脚本而言,有以下5个核心结构
workflow
task
call
command
output
每个脚本包含1个, 由多个构成。 在中,通过调用对应的。每个在代码块之外单独定义。
代表任务,读取输入文件,执行相应命令,然后输出。中对应的就是执行的命令,比如一条具体的gatk的命令, 指定的输出值。可以将理解为编程语言中的函数,每个函数读取输入的参数,执行代码,然后返回,对应执行的具体代码,对应返回值。
在中,也是可以传递参数的。和中的写法不同
1. task 中的参数
下面的示意图中,task 有3个输入的参数,文件类型的, 和字符串类型的。 在中,通过这种格式访问变量的值
2. workflow 中的参数
下面的示意图中, 有3个参数,文件类型的, 和字符串类型的。传递这3个参数给时,直接传变量名就可以了。
作为流程管理语言,需要对多个统一管理。task之间具有多种关系
1. 一对一的依赖关系
前一个的输出,作为后一个的输入
示例如下
一个的多个输出作为下一个的输入
示例如下:
2. 多对多的依赖关系
一个的输出作为多个的输入,或者多个的输出作为1个的输入
示例如下:
3. 平行关系
多个之间完全平行,可以并行执行
示例如下:
和函数还是有一定的区别,函数可以在代码中多次调用,但是多次调用会有风险。下面的示意图中,stepA 运行两次,一次作为stepB的输入,一次作为stepC的输入。如果stepA的两次调用并行执行,当执行完之后,在传递给下一个task时,由于存在两个同名的stepA, stepB和stepC 就会无法正确接受参数。
中提供了解决方案,叫做, 为起一个别名,示例如下
在WDL脚本中, 理论上每个 只可以调用1次,如果希望多次调用,必须借助。
掌握以上几点,就可以理解一个脚本的整体框架了。在实际使用中,我们只要能理解整个的流向,会使用脚本就可以了。
运行脚本,需要两个文件
领取专属 10元无门槛券
私享最新 技术干货