用于(数组中的var)在awk中遍历数组

电脑杂谈  发布时间:2020-04-29 05:16:49  来源:网络整理

字符串数组初始化为0_awk数组初始化_字符数组初始化为0

我一直使用C语法在awk中编写代码,所以我总是使用(i = 1; i <= maxindex;

i ++)遍历数组. 我不小心看到了(var in

几天前awk

awk数组初始化_字符数组初始化为0_字符串数组初始化为0

array)也可以实现此功能,并且很高兴地采用了它,并假定这只是前一个方法的简化形式,直到以下代码段始终无法按我期望的方式运行:

对于(i = 1; i <= nf; i ++){p =(fx [i] ^ 2 + fy [i] ^ 2 + fz [i] ^ 2)^ 0.5;半径=

“否”; for(半径rc)是否为(r-radius [rc] <1e-10 && r-radius [rc]> -1e-10

awk数组初始化_字符串数组初始化为0_字符数组初始化为0

){inradius =“是”; n [rc] ++; break;} if(inradius ==“ no”){rc ++;

半径[rc] = r; n [rc] ++;} ...}

此代码旨在根据坐标点与原点的距离对其进行分类. 最外面的for循环以显式方式遍历所有点,其中fx,fy和fz分别是该点的x,y和z坐标值. 对于每个点,计算从点到原点的距离r,然后确定距离r是否在现有距离数组半径中. 如果是,则将点分类为现成类别,否则将元素(即新类别)添加到半径数组中awk数组初始化,然后将点分类为新类别.

awk数组初始化_字符数组初始化为0_字符串数组初始化为0

但是,即使有一个新的距离r出现,它的运算结果也立刻使我感到困惑,用来表征这些r的类别的rc在确定值之后就停止增长,好像11行rc ++莫名其妙地无效!我检查了很多遍脚本,甚至进行了很多猜测,但是我找不到问题所在. 无奈之下,第四行的隐式遍历

(半径rc)被改写为(rc = 1; rc <= maxrc; rc ++)的显式形式,但我没有希望,但意外发现问题消失了.

此后,awk伙计,找到了有关(var in array)语句的解释,并最终实现了它,其内容为: 该命令的顺序

awk数组初始化_字符数组初始化为0_字符串数组初始化为0

var横向未定义数组的索引.

也就是说awk数组初始化,var遍历数组的顺序是不确定的,但是我一直都将其理解为(var = 1; var <= maxindex;

var ++)是一种简化的编写方式. 因此,面对未知的事物,我们必须保持谨慎的态度.

考虑到这一点,随着智慧成长.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-192602-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...