如何在awk中遍历数组?for in遍历异常问题咨询
awk数组遍历问题排查与修复
问题根源
- awk的
for (var in 数组)语法,遍历的是数组的索引值,而非数组元素内容。你用split(rep,proxyset,",")得到的proxyset数组,索引是1、2,对应元素是abc|123、xyz|456,所以遍历输出var自然是1和2。 - 你错误地对索引
var执行split(var,a,"|"),而不是对数组元素proxyset[var]拆分,导致site数组根本没被正确赋值。
修正后的代码
PROXY_PASS_MAPPING=abc|123,xyz|456 awk -v rep=$PROXY_PASS_MAPPING ' BEGIN { split(rep, proxyset, ",") print proxyset[1] for(var in proxyset ){ # 遍历索引,取对应元素拆分 split(proxyset[var], a, "|") site[a[1]] = a[2] # 可选:打印验证元素内容 print "元素内容:" proxyset[var] ", 拆分后site[" a[1] "] = " a[2] } print site["abc"] } '
补充说明
如果需要按顺序遍历数组(awk的for in不保证遍历顺序),可以使用普通for循环:
PROXY_PASS_MAPPING=abc|123,xyz|456 awk -v rep=$PROXY_PASS_MAPPING ' BEGIN { len = split(rep, proxyset, ",") for(i=1; i<=len; i++){ split(proxyset[i], a, "|") site[a[1]] = a[2] } print site["abc"] } '
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

