【问题标题】: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 ...",也许它会起作用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多