awk 问题(从用户定义的函数返回一个数组)
Posted
技术标签:
【中文标题】awk 问题(从用户定义的函数返回一个数组)【英文标题】:awk issue (return an array from user defined function) 【发布时间】:2012-09-03 04:38:12 【问题描述】:我有这个功能(将 WGS84 大地水准面的坐标转换为笛卡尔坐标……没关系):
function convert_geo_to_enu(coord_geo) \
xi=sqrt(1 - e*e*sin(coord_geo[1])*sin(coord_geo[2])); \
\
coord_enu[1]=(a/xi + coord_geo[3])*cos(coord_geo[1])*cos(coord_geo[2]); \
print coord_enu[1] " hhh " ; \
coord_enu[2]=(a/xi + coord_geo[3])*cos(coord_geo[1])*sin(coord_geo[2]); \
coord_enu[3]=(a*(1-e*e)/xi0 + coord_geo[3])*sin(coord_geo[1]); \
\
return coord_enu \ # <-- here comes the problem
\
problem --> mawk: line 64: illegal reference to array coord_enu
作为数组返回有什么问题?有什么不同的语法吗?
我可以使用:
function convert_geo_to_enu(coord_geo, coord_enu) \
...
coord_enu[1]=...
...
\
甚至:
function convert_geo_to_enu(coord_geo) \
...
coord_enu[1]=...
...
\
然后只使用变量coord_enu
作为全局变量?
但是使用 return 语句看起来更好(尤其是对我来说)
【问题讨论】:
删除所有行继续字符。它们不是必需的,may cause problems,而且肯定会妨碍可读性。 【参考方案1】:有点晚了,但这是我使用的解决方案:
我发送了一个我想要填充的变量作为函数的参数:
function myfunct(result, array_size)
for(i = 1; i <= array_size; i++)
result[i] = ##whatever you want
然后,您可以将结果变量视为函数外部的数组
希望这对寻找答案的人有所帮助
【讨论】:
“永远不会太晚”:D!所以我可以awk "function myfunct(result,array_size) for(i=1; i<=array_size;i++) result[i]= i+1 ; print result[1]; BEGIN abc = myfunct(a, 3); print a[3];"
谢谢!
来自手册页:参数[到函数]如果是标量则通过值传递,如果是数组则通过引用传递【参考方案2】:
将数组视为全局数组。 AWK 无法返回数组。
【讨论】:
能否提供参考? @sergj:gawk
输出的错误消息提供更多信息:“尝试在标量上下文中使用数组 'coord_enu'”。我将继续寻找文档,但在 gawk
或 mawk
手册中并没有明确说明。
参考:gnu.org/software/gawk/manual/html_node/…以上是关于awk 问题(从用户定义的函数返回一个数组)的主要内容,如果未能解决你的问题,请参考以下文章