'中的列号;awk&x27;与'一起使用;平行';在生成文件中

'中的列号;awk&x27;与'一起使用;平行';在生成文件中,awk,makefile,parallel-processing,gnu-make,Awk,Makefile,Parallel Processing,Gnu Make,考虑以下Make规则 output.txt: input-*.txt parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^ 问题在于在awk中指定列号(或任何美元变量)。如果awk命令只是在一个Makefile中(即,没有提供给parallel),它可以工作,但是当用作parallel的参数时,它就不能工作 以下变体也不起作用 parallel -j 16 'echo {} | awk "{print \$0}"' ::: $^

考虑以下
Make
规则

output.txt: input-*.txt
    parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^
问题在于在awk中指定列号(或任何美元变量)。如果awk命令只是在一个Makefile中(即,没有提供给parallel),它可以工作,但是当用作parallel的参数时,它就不能工作

以下变体也不起作用

    parallel -j 16 'echo {} | awk "{print \$0}"' ::: $^

有人能帮我解决这个问题吗?

Make不在乎反斜杠或引号。make关心的唯一字符(在配方中)是
$
,唯一的转义方法是将其加倍:
$
。如果使用
$$0
不起作用,那么问题不在于make,而在于shell和/或并行程序

您应该做的是在shell提示符下运行该命令,并使其在需要转义的情况下工作,而不必担心make

一旦为shell提示符正确转义了规则,就可以将其剪切并粘贴到makefile配方中,并将所有
$
字符替换为
$
,这样就可以了

查看并行手册页,您使用的命令似乎不能是内联脚本,这可能是您的版本无法工作的原因。这显然是一个实际的命令。也许如果您使用
/bin/sh-c“echo…”
替代它,它会工作吗