添加多维数组的总数
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]]
}
}
问题
我有以下数组:
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]]
}
}