添加多维数组的总数

Add Total of an Multidimensional Array

问题

我有以下数组:

scansum[key,key2]++

key = 多个 6 位数字,例如。 123456、234567、345678等

key2 = 一个小时,例如。 00、01、02 等

示例代码

#!/bin/sh

awk '
BEGIN {
        printf ("---------------------------------------\n-----CTS_DR Read Report By Scanner-----\n---------------------------------------\n")
        }
                {
                key = substr (,3,6) #Scanner
                key2 = substr (,1,3) #Hour
                scanner[key]++
                if ( ~ /SR1/) scansum[key,key2]++
                }
END {
                for (scan in scanner) {
                        printf ("\nScanner: MS%6s\tTotal Reads:%8s\n",scan,scanner[scan])
                        for (i = 0; i <= 23; i++) {
                                        if (i < 10)
                                        h = "0" i
                                        else
                                        h = i
                                print "Hour: "h " Count Test: "scansum[scan,h]
                                }
                        }
}'

我知道对于普通数组你可以这样做:

for (alias in arrayname) {
print arrayname[alias]
}

这将对按键拆分的数组进行计数,但对于多维数组,以下内容似乎不起作用:

for (alias in arrayname) {
  print alias
  for (i = 0; i <= 23; i++) {
      if (i <10)
      h = "0" i
      else
      h = i
  print h"\t"arraynamecount[alias,h]
  }
}

备注

我知道这是缺少数组的设置

我知道我错过了一些东西,但我一辈子都看不到它是什么。对此的任何提示/帮助将不胜感激。

this link 中所述,您可以使用 split() 函数为 awk 多维数组的每个索引获取一个数组,因为表单的每个索引

key1,key2,···,keyN

存储为字符串

key1[SUBSEP]key2[SUBSEP]···[SUBSEP]keyN

其中[SUBSEP]代表在SUBSEP变量中保留的ASCII字符,默认为4。事实上,您可以使用该字符串交替访问任何多维数组元素:

x=myarray[key1 SUBSEP key2]

基本上 END 块应该类似于此

END {
      for (scan in scansum) {
        split(scan,ind,SUBSEP)
        print "Scanner: " ind[1] "\tHour: " ind[2] "\tCount Test: " scansum[ind[1],ind[2]]
      }
}