Prefix Convenience Function
Prefix Convenience Function
Some tools don't ask you for an output file directly, but rather they ask you for a prefix for the output file, to which they append a suffix. For example, the samtools sort
command requires you to give it the name of the output without the ".bam" suffix. To make this easy to deal with, Bpipe offers a "magic" ".prefix" extension that lets you refer to an output, but pass to the actual command the output trimmed of its suffix.
Example
sort_reads = {
filter("sorted") {
exec "samtools sort -b test.bam $output.prefix"
}
}
Here we are referring to the output "something.sorted.bam" but only passing "something.sorted" to the actual command.
The "prefix" function actually works on any string (or text) value in Bpipe scripts. So you can even write it like this:
BASE_FILENAME="test.bam".prefix
Note: when you use an expression like $output.prefix
, it is important to understand that Bpipe considers this a reference to the file in $output, not a reference to a file named as the value that $output.prefix
evaluates to. This means that if your command does not actually create the file with the name that $output
evaluates to, you may get an error reported by Bpipe, because this is what it is expecting. For this reason, take care when using the prefix
construct in conjunction with output variables and use them only when your command will actually create a file with the value of $output
after being passed a truncated file name, and not simply as a convenience to make a string / text value with the value of $output
truncated.