繁体   English   中英

如何在awk中初始化2D数组

[英]How to initialize a 2D array in awk

我正在使用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

在这种情况下,您不需要初始化数组。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM