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

时间:2015-03-05 13:00:15

标签: bash parallel-processing gnu-parallel

我有两个与gnu并行的问题。首先是最有趣的:

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

/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[@]}

然而,在这种情况下,并行将{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}在$(东西)中无法识别 该脚本需要输出输出参数。

1 个答案:

答案 0 :(得分:2)

我认为你需要这个:

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$

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