【发布时间】:2016-05-25 20:28:51
【问题描述】:
我正在使用二维数组来保存某些模式的重复次数。例如:
$4 == "Water" {s[$5]["w"]++}
$4 == "Fire" {s[$5]["f"]++}
$4 == "Air" {s[$5]["a"]++}
其中$5 可以是attack1、attack2 或attack3。在END{ } 中,我打印出这些值。但是,其中一些模式不存在。所以对于s["attack1"]["Air"] =0,我的代码打印空格。因此,我想知道在BEGIN{ } 中是否有一种方法可以在一行中初始化数组,而不是初始化我需要的每个元素。
awk -f script.awk data
这是我用来运行我的脚本的命令。我不允许使用任何其他标志。
编辑 1:
这是当前的输出
Water Air Fire
attack1 554 12
attack2 14 24
attack3 6 3
这是我想要的输出:
Water Air Fire
attack1 554 0 12
attack2 14 24 0
attack3 6 0 3
【问题讨论】:
-
非常不清楚您想要什么,或者为什么打印空白是坏事,或者如果您不满意为未填充的值获取空白,为什么不只打印填充的值。编辑您的问题以包含一个简洁、可测试的示例,包括示例输入和预期输出以及解释。另外 - 您是否使用支持真正多维数组的 GNU awk 版本?
-
@EdMorton,我添加了当前的输出。而且我相信 GNU 支持真正的多维数组,因为它以应有的方式工作。
-
如果您切换到二维数组(即 a[i,j])而不是数组数组(即 a[i][j]),可能会容易得多。另请注意,在 awk 中,
a[i]++是合法的(只要已定义 i),即使 a[i] 尚未初始化,因此通常不需要显式初始化。 -
好的,你添加了输出。好的。现在添加将产生该输出的输入,您将得到一个我们可以帮助您解决的问题。
标签: arrays multidimensional-array awk initialization