使用gawk 4构建数组数组,并需要从中计算出百分比数据。需要按升序对值进行排序,这在处理多维数组时使用asort是不可能的。我的一些值将是重复的整数,但我需要保留所有重复的值。
以下是我的数据。[a]和[b]的元素名称最终成为唯一的字符串。数组[b]的元素名为1,2,3等,其中包含我需要排序的数据作为值
mArray[a][b][1]=3456 mArray[a][b][2]=1456 mArray[a][b][3]=1456 ... mArray[a][b][1]=9233 mArray[a][b][2]=9233 mArray[a][b][3]=1234 ... mArray[a][b][1]=4567 mArray[a][b][2]=4567 mArray[a][b][3]=3097
我想我可以从每个唯一的[a]元素创建正则数组,并从它对应的[b][x]中插入值,然后以此为基础,但随后我会丢失任何重复的值。现在我通过遍历mArray并根据[a]的名称写入不同的文件,打印出[b][x]下的所有值,然后运行sort来破解它。很好奇是否有更优雅的方法。
以下是我在mArray上使用asort测试输出是否正确的方法。30分钟后,我没有输出或错误。
for ( a in mArray ) {
for ( b in mArray[a] ) {
n=asort(mArray[a][b][c])
print n
}
}
背景:解析来自网络监控系统的CSV报告,获取吞吐量样本数据,然后在所有接口上聚合这些值,以确定设备总吞吐量的95%。
编辑
排序后所需的输出格式为:
mArray[a][b][1]=1456 mArray[a][b][2]=1456 mArray[a][b][3]=3456 . mArray[a][b][1]=1234 mArray[a][b][2]=9233 mArray[a][b][3]=9233 ... mArray[a][b][1]=3097 mArray[a][b][2]=4567 mArray[a][b][3]=4567
好吧,你必须对myArray[a][b]进行排序,而不是对myArray[a][b][c],因为c根本不存在;)
如果不想就地排序,则必须将destination作为第二个参数添加到asort中。至少这在gawk中有效,尽管我不知道是哪个版本。在gawk 4中确实如此。
然后你必须一个接一个地打印一个数组。。。
for ( a in myArray ) {
for ( b in myArray[a] ) {
asort(myArray[a][b], n)
for( i in n ) print "m["a"]["b"]["i"]="n[i]
}
}