【WDL】4. 内置函数


内置函数主要分为三大类:

  • 输入输出:stdout, stderr,read_tsv

  • 信息获取类:defined, glob, basename, select_first

  • 变量操作:prefix, sub

WDL函数的目的主要在于粘合task,不要用于一般的数据处理操作(放在task中处理)

输入输出函数

对内容汇总,其基本功能也可通过command多行命令实现,但不利于协作开发,尤其是代码维护,可以强制输出文件的格式类型。

标准输出/报错获取

stdout()函数用于捕获command中命令生成的标准输出。

task demo_echo{
	String a = "Hello world"
	command{echo ${a}}
	output{File demo = stdout()}
}

stderr()函数用于捕获command中命令生成的标准报错。

task demo_echo{
	command{sm_cmd ...}
	output{File demo = stderr()}
}

stderr比stdout更常用,更多用于捕获warning信息

文件输入输出

文件输入输出函数的主要作用是讲WDL中的数据传递成为文件,并将文件内容转化为WDL变量。通常与stdout联合使用。

  • 文件读入:read_tsv, read_json, read_lines... #文件转化为变量

  • 文件输出:write_tsv, write_lines... #变量转化为文件

基本格式:TSV

  • tab分隔,类似R中的data.frame。

  • tsv文件在wdl解析时,没有表头行(header),因此在scatter时需要进行特别处理。

基本格式:JSON

  • 结构化存储,key-value

  • 对于结构相对复杂的数据类型,如Map、Object,非常适合json输入输出

输入函数以read_json为例:将一个json文件转化为Object变量

# json file: person.json
{
	"name":"John",
	"age":42
}

# WDL read
workflow demo{
	File json_file = "person.json"
	Object p = read_json(json_file)
	...
	call record{
		input:
			name = p.name,
			age = p.age
	}
}

输出函数以write_tsv为例:将一个WDL的二维数组转化为一个文件(路径)作为参数

task write_record{
	Array[Array[String]] my_table
	command{
		cat ${write_tsv(my_table)}
	}
	...
}

信息获取函数

与其他语言类似

  • glob:获取某一类型文件,返回文件数组

  • defined:判断变量是否被定义,返回布尔值True/False

  • select_first:输入为数组,返回某个不为空的元素。很重要的函数!

WDL的空为NULL

变量操作函数

粘合task之间工作

  • prefix:为数组变量加上前缀。对于同类型的多输入文件非常重要!

  • sub:提供正则表达式功能(不建议在WDL中使用)

小结

  • WDL内置函数集主要是针对流程串写而设置的,因此和一般语言略有不同

  • 可通过WDL内置函数进行文件与变量之间的转化

  • 除上述函数外,WDL还有十分丰富的功能函数,用户可根据需求使用

https://www.bilibili.com/video/BV1KL411V7iz/?spm_id_from=333.788.recommend_more_video.3

posted @ 2022-05-11 23:58  生物信息与育种  阅读(264)  评论(0编辑  收藏  举报