我正在多个文件夹/样本上运行命令行软件。每个文件夹都有这样的文件 *fastq.gz。
下面是一个文件夹的示例。
Sample_EC_only/EC_only_S1_L005_I1_001.fastq.gz Sample_EC_only/EC_only_S1_L005_R1_001.fastq.gz Sample_EC_only/EC_only_S1_L005_R2_001.fastq.gz Sample_EC_only/EC_only_S1_L006_I1_001.fastq.gz _only/EC_only_S1_L006_R1_001.fastq.gz
我正在尝试使用 gnu 并行运行多个软件,但在提取文件夹的“ID”时遇到问题。
parallel -j $NSLOTS --xapply \
" echo {1} \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id = "{basename} {1}" \
--transcriptome=$ref_data \
--fastqs={1} \
" ::: $TMPDIR/FASTQ/Sample*
我想从 gnu parallel 内的文件夹中提取例如“Sample_EC_only”作为模式。 --fastqs 能够使用 {1} 获取路径,但使用 --id 选项时出现问题。我尝试了各种选项来从 {1} 中的路径中提取模式,但不起作用。
--id 参数需要从 {1} 中的路径中提取的模式,以便它可以创建输出目录。
每个{1}由eg组成(下面仅显示一个示例)
/tmp/FASTQ/Sample_EC_only
答案1
如果我理解正确的话,您所寻找的只是{1/}
而不是{1}
.它是参数的“基本名称”。看人并行_教程--rpl
以及我们在哪里拥有这样的讨论替换字符串的实现为
--rpl '{/} s:.*/::'
和位置替换字符串也可以使用修改/
等等。这{1/}
就像删除最后一个 之前的所有字符/
。
--rpl
您可以使用后跟以 a 开头的字符串来创建自己的替换速记字符串标签({/}
在上面的例子中),然后是一个perl表达式,例如上面的替换命令(s:
图案:
替代品:
)。
我不确定什么是允许的标签,但我们可以使用教程示例{..}
作为位置标签,即可以与{
数字}
。用于删除最后/
一个单词“Sample_”之前的所有内容的 perl 表达式将是:s:.*/Sample_::
所以您需要在--xapply
参数之前添加
--rpl '{..} s:.*/Sample_::'
然后使用--id={1..}
将此替换应用于 arg 1。例如,如果您想要删除第一个下划线之前的单词_
,而不是固定单词Sample
,则可以使用如下模式
--rpl '{..} s:.*/[^_]*_::'
最终命令应如下所示:
parallel -j $NSLOTS --rpl '{..} s:.*/Sample_::' --xapply \
" echo {1} \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id={1/} \
--id2={1..} \
--transcriptome=$ref_data \
--fastqs={1} \
" ::: $TMPDIR/FASTQ/Sample*