我正在使用2D数组来保存某些模式的重现次数。例如:
$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
答案 0 :(得分:1)
在这种情况下,您不需要初始化阵列。 Awk已经有一个默认的空值,所以你只需要改变打印值的方式。
观察:
awk 'BEGIN {print "Blank:", a[1];
print "Zero: ", a[1] + 0;
printf("Blank: %s\n", a[1]);
printf("Zero: %i\n", a[1])}'
输出:
Blank:
Zero: 0
Blank:
Zero: 0