如何修复Gnu Parallel中的“无法打开[{2}]”错误

时间:2019-08-29 15:39:40

标签: gnu-parallel

我想并行化一个同时使用两个程序的图像处理步骤。我的代码对于单个图像可以正常工作,但是当我尝试对其进行并行化时,它将失败。

我正在使用的两个程序分别是USGS成像仪和光谱仪集成软件中的fxgetkey。我使用fx对输入图像(在下面的代码中为“ f1”)执行算术运算,并将其写入新文件(即“ to”参数)。 getkey输出所请求关键字的值,在这种情况下为数字。

在下面的代码中,我从输入图像f1中减去getkey的输出,并将结果写入到新文件中,该文件由'to'参数定义。此代码可以正常运行:

 fx f1=W1660432760_1_overclocks_average_lwps5.cub to=testing_fx2.cub equation=f1-$(getkey from=W1660432760_1_overclocks_average_lwps5_stats.txt grpname=results keyword=average)

当我尝试并行化时,问题就来了。以下代码给出了错误,提示“无法打开[{2}]”。

parallel fx f1={1} to={1.}_minus_avg.cub equation=f1-$(getkey from={2} grpname=results keyword=average) ::: $(find *lwps5.cub) ::: $(find *stats.txt)

我期望的结果是输出图像,其像素值比输入图像小getkey值。

1 个答案:

答案 0 :(得分:1)

如果应该以两种方式组合两个输入:

parallel fx f1={1} to={1.}_minus_avg.cub 'equation=f1-$(getkey from={2} grpname=results keyword=average)' ::: *lwps5.cub ::: *stats.txt

如果两个输入应该链接:

parallel fx f1={1} to={1.}_minus_avg.cub 'equation=f1-$(getkey from={2} grpname=results keyword=average)' ::: *lwps5.cub :::+ *stats.txt

如果这些方法都不能解决您的问题,请制作一个包含2个参数的shell函数:

doit() {
  arg1="$1"
  arg2="$2"
  # Do all your stuff with getkey and fx
}
export -f doit
# all combinations
parallel doit ::: *lwps5.cub ::: *stats.txt
# or linked
parallel doit ::: *lwps5.cub :::+ *stats.txt