如何修复 Gnu Parallel 中的 'Unable to open [{2}]' 错误

How to fix 'Unable to open [{2}]' error in Gnu Parallel

我想并行化同时使用两个程序的图像处理步骤。我的代码适用于单个图像,但当我尝试并行化它时,它失败了。

我使用的两个程序是 fxgetkey 来自 USGS Integrated Software for Imagers and Spectrometers。我使用 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)

当我尝试并行化它时,问题就来了。下面的代码报错,说 'Unable to open [{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 值。

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

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=""
  arg2=""
  # 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