首页 > 解决方案 > “=”处的 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)

标签: awk

解决方案


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

log(expr) 自然对数函数。

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

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

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

推荐阅读