【问题标题】:Column numbers in 'awk' used with 'parallel' in a Makefile'awk' 中的列号与 Makefile 中的 'parallel' 一起使用
【发布时间】:2017-04-21 15:31:58
【问题描述】:
考虑以下Make 规则。
output.txt: input-*.txt
parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^
问题在于在 awk 中指定列号(或任何美元变量)。如果 awk 命令只是在 Makefile 中(即,没有提供给并行)它可以工作,但是当用作并行的参数时,它就无法工作。
以下变体也不起作用。
parallel -j 16 'echo {} | awk "{print \$0}"' ::: $^
有人可以帮我解决这个问题吗?
【问题讨论】:
标签:
awk
makefile
parallel-processing
gnu-make
【解决方案1】:
Make 不关心反斜杠或引号。唯一关心的角色(在食谱中)是$,而逃避它的唯一方法是将它加倍:$$。如果使用 $$0 不起作用,则问题不在于 make,而在于您的 shell 和/或并行。
你应该做的是在 shell 提示符下运行命令,并让它在那里工作,不管需要什么转义,根本不用担心 make。
一旦您为 shell 提示符正确转义了规则,您就可以将其剪切并粘贴到您的 makefile 配方中,并将所有 $ 字符替换为 $$,这样就可以工作了。
查看并行手册页,您使用的命令似乎不能是内联脚本,这可能是您的版本不起作用的原因。它显然必须是一个实际的命令。如果你改用/bin/sh -c "echo ...",也许它会起作用?