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$
对于输出文件,您可以使用{#}
(工作编号)来制定您喜欢的内容。
我在使用 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$
对于输出文件,您可以使用{#}
(工作编号)来制定您喜欢的内容。