美文网首页js css html
【WDL】4. 内置函数

【WDL】4. 内置函数

作者: 生物信息与育种 | 来源:发表于2022-05-11 23:50 被阅读0次

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

  • 输入输出: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

相关文章

网友评论

    本文标题:【WDL】4. 内置函数

    本文链接:https://www.haomeiwen.com/subject/bfzjurtx.html