对数组数组中的值进行排序



使用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]
 }
}

相关内容

  • 没有找到相关文章

最新更新