在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
你可以帮我解决这个问题吗?它与引号有关吗?
答案 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脚本正文的一部分它。希望你以后遇到的任何问题都很明显,很容易解决。