Filter array of files to one file
2
0
Entering edit mode
6.5 years ago
eduardo ▴ 10

One step in my workflow produces File[] and I need to filter to grab just one File for the next step. I am trying to use glob without much success. Any hints?

cwl • 1.4k views
ADD COMMENT
1
Entering edit mode
6.5 years ago
eduardo ▴ 10

Michael R. Crusoe point out a couple of solutions:

At workflow level:

in:
  single_file:
    source: other_step/array_of_files
    valueFrom: $(self[0])
ADD COMMENT
0
Entering edit mode

So this was something already answered by @Michael in one of the other posts? Generally good to link to the original when you do this.

Also accept your answer (green check mark) to provide closure to this question.

ADD REPLY
0
Entering edit mode

I tried to acknowledge Michael R. Crusoe, but I didn't found a way to link to a specific gitter message. Or were referring to this other post? Converting stdout (File) to string

I made another post because Converting stdout (File) to string was about converting a file to string. The solution is similar.

ADD REPLY
0
Entering edit mode

valueFrom: $( self.filter(file => !!file.basename.match(/^.*.ids.txt$/)).pop() )

ADD REPLY
1
Entering edit mode
6.5 years ago
eduardo ▴ 10

Add an ExpressionTool step to filter:

cwlVersion: v1.0
class: ExpressionTool

requirements: { InlineJavascriptRequirement: {} }

inputs:
  files:
    type: File[]

expression: |
    ${ return {"ids": inputs.files.filter(file => !!file.basename.match(/^.*\.ids\.txt$/)).pop()}; }

outputs:
  ids:
    type: File
ADD COMMENT

Login before adding your answer.

Traffic: 2149 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6