加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

多维数组 – awk中的多维数组

发布时间:2020-12-14 02:07:17 所属栏目:Linux 来源:网络整理
导读:我尝试在awk中创建一个伪多维数组. # Calculate cumulative context scoreBEGIN { FS=OFS="t" }{ a[$2+FS+$7,$3]+=$6}END { for (i,j) in a { print i,j,a[i,j] }} 输出: awk: ccstscan.awk:9: END { for (i,j) in aawk: ccstscan.awk:9: ^ syntax error
我尝试在awk中创建一个伪多维数组.

# Calculate cumulative context score

BEGIN { FS=OFS="t" }

{
        a[$2+FS+$7,$3]+=$6
}

END { for (i,j) in a
        { print i,j,a[i,j] }

}

输出:

awk: ccstscan.awk:9: END { for (i,j) in a
awk: ccstscan.awk:9:             ^ syntax error

这是GNU awk手册中提到的内容:

To test whether a particular index sequence exists in a
multidimensional array,use the same operator (in) that is used for
single dimensional arrays. Write the whole sequence of indices in
parentheses,separated by commas,as the left operand:

06002

我尝试修改脚本来创建一个真正的多维数组:

BEGIN { FS=OFS="t" }

{
    a[$2+FS+$7][$3]+=$6
}

END { for i in a
    {
     for j in a[i]
        { print i,a[i][j]
        }

    }
}

我用gawk跑了.它也给出了一个错误:

gawk: ccstscan.awk:6:   a[$2+FS+$7][$3]+=$6
gawk: ccstscan.awk:6:              ^ syntax error
gawk: ccstscan.awk:9: END { for i in a
gawk: ccstscan.awk:9:           ^ syntax error
gawk: ccstscan.awk:11:   for j in a[i]
gawk: ccstscan.awk:11:       ^ syntax error
gawk: ccstscan.awk:11:   for j in a[i]
gawk: ccstscan.awk:11:             ^ syntax error
gawk: ccstscan.awk:12:          { print i,a[i][j]
gawk: ccstscan.awk:12:                          ^ syntax error

制作和扫描多维关联数组的正确格式是什么

解决方法

如果您使用模拟的多维数组,您的循环将需要如下所示:

END { 
    for (ij in a) {
      split(ij,indices,SUBSEP);
      i=indices[1];
      j=indices[2];
      print i,a[ij]
    }
  }

语法中的(i,j)仅用于测试特定索引是否在数组中.尽管for循环允许类似的语法,但它不适用于for循环.

对于真正的多维数组(数组数组),您可以这样写:

BEGIN { FS=OFS="t" }

{ a[$2+FS+$7][$3]+=$6 }

END { 
  for (i in a) {
    for (j in a[i]) { 
      print i,a[i][j]
    }
  }
}

但是,数组数组仅在gawk 4.0中添加,因此您的gawk版本可能不支持它.

另一个注意事项:在这一行:

a[$2+FS+$7,$3]+=$6

看起来你试图连接$2,FS和$7,但“”用于数字加法,而不是连接.你需要这样写:

a[$2 FS $7,$3] += $6

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读