This is a test version of Biostars. For the public version, visit https://www.biostars.org.
String editing for output file name

This is a question related to String concatenation for output

This shell script outputs a file named R1_001_fastqc.results this is what I want to capture in the cwl. How could this be done ? The following code does not work

cat test.cwl

cwlVersion: v1.0
class: CommandLineTool
baseCommand: [sh, fastqc_check.sh]

requirements:
  - class: InlineJavascriptRequirement

inputs:
 fq1_zips:
  type: File
  inputBinding:
   position: 1

outputs:
 fastqc_check_out:
  type: File
  outputBinding:
   glob: $(inputs.fq1_zips.basename.split(".").slice(0)).results

cat test.yml

fq1_zips:
        class: File
        path: R1_001_fastqc.zip

fastqc_check_script:
 class: File
 path: fastqc_check.sh
cwl

Does the answer I posted in the other post not do what you need? This seems like you want to do the same thing as that post, what is different about it?

This time the output is R1_001_fastqc.results, I want to strip off the .zip from the output file. In the previous post the output was R1_001_fastqc.zip.results

The glob command below was tried to achieve the output filename as R1_001_fastqc.results

glob: $(inputs.fq1_zips.basename.split(".").slice(0)).results

Basically a part of the input file is used to name the outputfile name

Hope I am clear this time

2 answers

Oh, in that case use glob: $(inputs.fq1_zips.nameroot).results and remove the InlineJavascriptRequirement as it also isn't needed here.

edit to clarify: For future reference with File types nameroot refers to the filename without the extension and basename includes the extension.

Yes, it worked. Thanks !!

You should mark it as accepted if it answered your question.

What if the output file should be named SampleA_fastqc.summary according to the inputs/sample as shown below

cat test.cwl cwlVersion: v1.0 class: CommandLineTool baseCommand: [sh, fastqc_check.sh]

inputs:
 sample:
  type: string
  inputBinding:
   position: 1
 fq1_zips:
  type: File
  inputBinding:
   position: 2

outputs:
 fastqc_check_out:
  type: File
  outputBinding:
   glob: $(inputs.sample.basename)_fastqc.summary

cat test.yml

sample: SampleA
fq1_zips:
        class: File
        path: R1_001_fastqc.zip

fastqc_check_script:
 class: File
 path: fastqc_check.sh

Since sample is a string type, you don't need basename, as that is a File type attribute. Just use glob: $(inputs.sample)_fastqc.summary

This works...Thank you

Log in to answer this question.