namerootではうまく編集できないouput名の編集
目的
inputのFileやstringを用いて、outputファイル名を作成したい(例)inputのファイル名を一部変えたoutputファイル名
code:bash
# before
examele-foo.vcf.gz
# after
example.vcf.gz
解答
他の入力パラメータを使って出力名を作成する例を示します。この場合、example.vcf.gzからexamele-foo.vcf.gzを作りたいので、namerootフィールドを使うだけでは不十分です。(例)$(inputs.vcf.nameroot)
code:yaml
cwlVersion: v1.2
class: CommandLineTool
requirements:
InlineJavascriptRequirement: {}
baseCommand: echo
inputs:
vcf: string
output_name:
type: string
default: 'dummy text'
doc: "Automatically calculated from vcf"
inputBinding:
valueFrom: $(inputs.vcf.slice(0, -7))-foo.vcf.gz
outputs: []
このように実行できます
code:bash
$ cwltool sample.cwl --vcf example.vcf.gz
INFO /home/vscode/.local/bin/cwltool 3.1.20240708091338.dev14+gacd6a1b0
INFO Resolved 'sample.cwl' to 'file:///workspaces/cwltool/sample.cwl'
example-foo.vcf.gz
example-foo.vcf.gz
{}INFO Final process status is success
実装例
注意点
default: 'dummy text'を入れないと、下記valueFromは動かない
valueFrom: $(inputs.vcf.slice(0, -7))-foo.vcf.gz
output_nameは入力値としては基本的に与えないが、type:string?にはしない
type:string?は、output_nameの値がnullになり、output_nameのvalueFromが実行されないため、このケースでは機能しない。
type:string?にしても動くが、冗長
namerootではなぜだめなのか?
namerootはファイル名だけ取り出し最後の「.拡張子」を取り除くのには有効
code:yaml
# $(inputs.vcf.nameroot)
# vcf = path/to/examele-foo.vcf.gz
#change to .txt, examele-foo.vcf.txt $(inputs.vcf.nameroot)+.txt