• 【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

  • 相关阅读:
    每日一道面试题-02
    JAVA获取对象的四种方式
    每日一道面试题-01
    MD5算法原理浅谈
    JAVA--时间格式转换
    数据库-union和union all
    Struts1和Struts2的区别
    Java定时器Timer
    webView调试
    webView和js交互规范
  • 原文地址:https://www.cnblogs.com/jessepeng/p/16260572.html
Copyright © 2020-2023  润新知