将管道变量传递给 GNU parallel 中调用的子命令

将管道变量传递给 GNU parallel 中调用的子命令

在中bash,我尝试查找文件列表并将它们通过管道传输到parallel

find *.fasta | parallel "Gblocks {} -b2=$(( "$(cat {} | grep \> | wc -l)" / 2 + 1 ))"

其中Gblocks是单线程可执行文件,并且标志-b2设置一个基于>引用文件中的字符数的变量。

我的问题是它cat {}不起作用。我很确定我知道它为什么不起作用:该{}函数是 的一部分parallel,我正尝试在命令中引用它之内并行命令。我只是不知道如何真正让它发挥作用。

如果第一个文件findmyfile.fasta,那么命令应该是这样的:

find *.fasta | parallel "Gblocks myfile.fasta -b2=$(( "$(cat myfile.fasta | grep \> | wc -l)" / 2 + 1 ))"

编辑:正如@KamilMaciorowski 所建议的,我需要将第一组双引号更改为单引号,因此:

find *.fasta | parallel 'Gblocks {} -b2=$(( "$(cat {} | grep \> | wc -l)" / 2 + 1 ))'

相关内容