AWK关联数 组也不须要提前声明其大小,由于它在运行时可以自动的增大或减小。
数组利用的语法格式:
array_name[index]=valuearray_name:数组的名称index:数组索引value:数组中元素所授予的值创建数组
接下来看一下如何创建数组以及如何访问数组元素:
$ awk 'BEGIN {sites[\"大众runoob\"大众]=\"大众www.runoob.com\"大众;sites[\公众google\"大众]=\"大众www.google.com\"大众print sites[\"大众runoob\公众] \"大众\n\"大众 sites[\"大众google\"大众]}'
实行以上命令,输出结果为:

www.runoob.comwww.google.com
在上面的例子中,定义了一个站点(sites)数组,该数组的索引为网站英文简称,值为网站访问地址。可以利用如下格式访问数组元素:
array_name[index] 删除数组元素
我们可以利用 delete 语句来删除数组元素,语法格式如下:
delete array_name[index
下面的例子中,数组中的 google 元素被删除(删除命令没有输出):
$ awk 'BEGIN {sites[\"大众runoob\公众]=\"大众www.runoob.com\"大众;sites[\"大众google\"大众]=\"大众www.google.com\"大众delete sites[\"大众google\公众];print fruits[\公众google\公众]}'多维数组
AWK 本身只支持多维数组,不过我们可以很随意马虎地利用一维数组仿照实现多维数组。
如下示例为一个 3x3 的三维数组:
100 200 300400 500 600700 800 900
以上实例中,array[0][0] 存储 100,array[0][1] 存储 200 ,依次类推。为了在 array[0][0] 处存储 100, 我们可以利用如下语法: array[\"大众0,0\公众] = 100。
我们利用了 0,0 作为索引,但是这并不是两个索引值。事实上,它是一个字符串索引 0,0。
下面是仿照二维数组的例子:
$ awk 'BEGIN {array[\公众0,0\公众] = 100;array[\"大众0,1\公众] = 200;array[\"大众0,2\公众] = 300;array[\公众1,0\"大众] = 400;array[\公众1,1\"大众] = 500;array[\"大众1,2\公众] = 600;# 输出数组元素print \"大众array[0,0] = \公众 array[\"大众0,0\"大众];print \公众array[0,1] = \公众 array[\"大众0,1\"大众];print \公众array[0,2] = \"大众 array[\公众0,2\"大众];print \"大众array[1,0] = \公众 array[\公众1,0\公众];print \"大众array[1,1] = \"大众 array[\公众1,1\"大众];print \"大众array[1,2] = \公众 array[\"大众1,2\"大众];}'
实行上面的命令可以得到如下结果:
array[0,0] = 100array[0,1] = 200array[0,2] = 300array[1,0] = 400array[1,1] = 500array[1,2] = 600
在数组上可以实行很多操作,比如,利用 asort 完成数组元素的排序,或者利用 asorti 实现数组索引的排序等等。
需求:将相同ip后的不天命值相加统计出来awk '{a[$1]+=$2}END{for(i in a)print i,a[i]}' file
思路:
将ip作为a[]数组的下标,将$2中的内容赋值给a[$1]即a[ip],得到数组a[ip]=value
实行语句a[ip]+=value,这样同样的a[ip]中的值就会与下一行的$2相加,然后得到新的值,连续实行,直到文件末端实行完毕
END模块
用变量i读取数组的下标,再取出数值a[i]即value值
终极得到结果
思考:(有什么不同)
awk 'a[$1]+=$2;END{for(i in a)print i,a[i]}' file
但在END前须要添加;表示结束,不然会发生语法缺点
这个也能得到结果,实行后创造还是一个根本的问题pattern跟action的问题
若没有{}则表示pattern,action则表示1,即省略,会print $0;
实在都是一些细节问题。
篇幅有限,这里就不写更多案例了,后面会分享更多关于自动化运维(devops)内容,感兴趣的朋友可以关注下。