'awk'中的列号与Makefile中的'parallel'一起使用

时间:2017-04-21 15:31:58

标签: awk makefile parallel-processing gnu-make

请考虑以下Make规则。

output.txt: input-*.txt
    parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^

问题在于在awk中指定列号(或任何美元变量)。如果awk命令只在Makefile中(即没有提供给并行),它可以工作,但当用作并行参数时,它无法工作。

以下变体也不起作用。

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

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

1 个答案:

答案 0 :(得分:1)

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

你应该做的是在shell提示符下运行命令并让它在那里工作,无论是什么必须转义,都不要担心make。

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

查看并行手册页,看起来您使用的命令不能是内联脚本,这可能是您的版本不起作用的原因。它显然必须是一个实际的命令。也许如果您使用/bin/sh -c "echo ..."代替它会起作用?