gnu parallel: space 解释和过程变量编辑

gnu parallel: space interpretation and within process variable editing

我在使用 gnu parallel 时遇到了两个问题。首先是最有趣的:

我有一个文件,其中一行包含两个由 space 分隔的参数。这些参数应该以命令可以将它们识别为单独的方式一起传递给命令。

/path/to/A1 /path/to/A2  
/path/to/B1 /path/to/B2  
/path/to/C1 /path/to/C2

此外,我还有第二个变量作为数组。我想并行地将我上面文件中的所有成对参数与所有数组值组合起来。

我快到了,我的代码如下所示。

parallel  -a $tmpdir/inputfiles.txt $instaldir/ribotagger.pl  \
                    -in {1}         \
                    -region {2}     \
                    -out $exitdir/$folder/ribotag.{2} \
                    ::: ${regions[@]}

然而,在这种情况下,parallel 将 {1} 解释为

/path/to/A1 /path/to/A2

但作为

/path/to/A1\ /path/to/A2

因此,ribotagger 脚本将其解释为一个长参数,导致立即停止。

第二个问题,我希望并行创建的每个脚本实例的文件夹参数都不同。 我想到了类似

-out $exitdir/$(echo {1} | cut -d "/" -f 4)/ribotag.{2}

但是,似乎 {1} 在 $(stuff) 中无法识别 该脚本需要 运行.

的输出参数

我想你需要这个:

parallel --colsep ' ' -a inputfiles.txt echo 1={1} 2={2} 3={3} ::: france germany | cat -vet
1=/path/to/C1 2=/path/to/C2 3=france$
1=/path/to/C1 2=/path/to/C2 3=germany$
1=/path/to/B1 2=/path/to/B2 3=germany$
1=/path/to/B1 2=/path/to/B2 3=france$
1=/path/to/A1 2=/path/to/A2 3=germany$
1=/path/to/A1 2=/path/to/A2 3=france$

对于输出文件,您可以使用{#}(工作编号)来制定您喜欢的内容。