“=”处的awk语法错误,因为变量名在字符串中?

awk如果我将变量定义为字符串,并且该变量名称在字符串中,则会引发错误。为什么?

最小可重现示例:

echo "stuff" |  
awk '{
   dir = "/somewhere"
   log = dir "/log.gz" 
}'  FS="t"  OFS="t"

给出错误:

awk: cmd. line:3:    log = dir "/log.gz"
awk: cmd. line:3:        ^ syntax error

但是,如果我将变量重命名logmlog,如下所示:

echo "stuff" |  
awk '{
   dir = "/somewhere"
   mlog = dir "/log.gz" 
}'  FS="t"  OFS="t"

然后没有错误,它成功退出。

这里发生了什么?


$ awk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)

回答

log在程序中用作变量名,这是不允许的(它是awk编程中的保留关键字)。当我们看到man awk我们得到这个:

log(expr) 自然对数函数。

尝试在此处更改您的变量名称。

例如:当我将其名称更改为 l_log 时,它现在没有显示任何错误。我保留了它的名字,因为l_log你可以按照你的要求保留它。

echo "stuff" | 
awk '{
   dir="/somewhere"
   l_log=dir "/log.gz" 
}'  FS="t"  OFS="t"


以上是“=”处的awk语法错误,因为变量名在字符串中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>