AWK错误"未终止的正则表达式"和"意外的换行符或字符串结尾"

时间:2018-02-01 16:27:28

标签: bash awk

在bash脚本中,我正在执行以下cmds:

NO_VALUE_percentage=$(awk "BEGIN {print ($NO_VALUE/$map_total_pixel_value)*100}")
SNOW_VALUE_percentage=$(awk "BEGIN {print ($SNOW_VALUE/$map_total_pixel_value)*100}")
CLOUD_VALUE_percentage=$(awk "BEGIN {print ($CLOUD_VALUE/$map_total_pixel_value)*100}")

如果我在bash脚本中调用此cmd我没有错误,但是当我从另一个代码调用此脚本时,我收到以下错误:

ERROR>awk: cmd. line:1: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:1:                ^ unterminated regexp
TRACE - ERROR>awk: cmd. line:2: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:2:                            ^ unexpected newline or end of string
TRACE - ERROR>awk: cmd. line:1: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:1:                ^ unterminated regexp
TRACE - ERROR>awk: cmd. line:2: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:2:                            ^ unexpected newline or end of string
TRACE - ERROR>awk: cmd. line:1: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:1:                ^ unterminated regexp
TRACE - ERROR>awk: cmd. line:2: BEGIN {print (/483000)*100}
TRACE - ERROR>awk: cmd. line:2:                            ^ unexpected newline or end of string
你可以帮我解决这个问题吗?它与引号有关吗?

2 个答案:

答案 0 :(得分:2)

(评论太长了,但这里有一堆猜测)

我假设您的NO_VALUE和其他变量是您的调用脚本的本地变量。

当你打电话给这个时,这些变量不在环境中,你的脚本也不知道它们的值,因此命令变为print "/48300..",awk无法正确解释。

答案 1 :(得分:2)

在awk脚本中使用shell变量值的错误方法:

NO_VALUE_percentage=$(awk "BEGIN {print ($NO_VALUE/$map_total_pixel_value)*100}")

正确的方式(并增加了被零除保护):

NO_VALUE_percentage=$(awk -v noval="$NO_VALUE" -v mpval="$map_total_pixel_value" 'BEGIN {print (mpval ? (noval/mpval)*100 : 0)}')

这并不意味着您的代码在进行这些更改后会起作用,但它会避免您当前获得的神秘错误消息,因为您在awk甚至看到之前让shell变量扩展成为awk脚本正文的一部分它。希望你以后遇到的任何问题都很明显,很容易解决。