【问题标题】:awk syntax error calling user defined function调用用户定义函数的awk语法错误
【发布时间】:2015-02-03 19:57:36
【问题描述】:

我收到语法错误:

/usr/xpg4/bin/awk: file "./test.awk": line 64: syntax error
Context is:
>>>   printf (", %s", date_value  ( $3, fmt_yyyymmdd ) );   <<<

代码片段是:

fmt_yyyymmdd="yyyymmdd";
printf (", %s", date_value  ($22, fmt_yyyymmdd ) );

...

function date_value(string, format)
{
    return "20150101";
}

我无法理解语法错误在哪里。 一个非常相似的语句(只有一个参数)不会产生语法错误并且可以正常工作。

printf (", %s", char_value  ( $2) );

对我来说,awk 似乎要么不允许调用带有参数的用户定义函数,要么不允许调用带有多个参数的用户定义函数。不幸的是,我不精通 awk。

【问题讨论】:

  • 如果您将这些片段放入一个单独的最小示例来重现问题,这将使我们(也可能对您)更容易发现您的错误。
  • 您的printf 是否在操作中?

标签: awk


【解决方案1】:

我认为问题在于您如何调用该函数。在用户定义的函数中,名称和参数之间不能有任何空格,请使用:

printf (", %s", date_value($22, fmt_yyyymmdd ) );

【讨论】:

  • 是的,这就是问题所在,OP 断言 char_value ( $2) 没有这个问题是完全错误的。顺便说一句,awk 的语法应该是 printf ", %s", date_value($22, fmt_yyyymmdd),因为 awk 不是 C 语言,因此不需要尾随分号,而 printf 是内置函数而不是函数,所以将它的 args 括在括号中只是误导。跨度>
  • 我已经相应地更改了代码并将对其进行测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2015-05-30
  • 2018-05-05
相关资源
最近更新 更多