如何在awk

时间:2016-02-15 02:43:38

标签: arrays multidimensional-array awk initialization

我正在使用2D数组来保存某些模式的重现次数。例如:

$4 == "Water" {s[$5]["w"]++}
$4 == "Fire" {s[$5]["f"]++}
$4 == "Air" {s[$5]["a"]++}

其中$5可以是attack1attack2attack3。在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

1 个答案:

答案 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