龙空技术网

详解AWK 数组|如何将相同ip后的不定数值相加统计出来

波波说运维 399

前言:

而今姐妹们对“数组组加法怎么做出来的”可能比较珍视,同学们都需要学习一些“数组组加法怎么做出来的”的相关内容。那么小编也在网络上搜集了一些有关“数组组加法怎么做出来的””的相关内容,希望你们能喜欢,各位老铁们快快来学习一下吧!

概述

AWK 可以使用关联数组这种数据结构,索引可以是数字或字符串。

AWK关联数 组也不需要提前声明其大小,因为它在运行时可以自动的增大或减小。

数组使用的语法格式:

array_name[index]=value
array_name:数组的名称index:数组索引value:数组中元素所赋予的值创建数组

接下来看一下如何创建数组以及如何访问数组元素:

$ awk 'BEGIN {sites["runoob"]="";sites["google"]=""print sites["runoob"] "\n" sites["google"]}'

执行以上命令,输出结果为:

在上面的例子中,定义了一个站点(sites)数组,该数组的索引为网站英文简称,值为网站访问地址。可以使用如下格式访问数组元素:

array_name[index] 
删除数组元素

我们可以使用 delete 语句来删除数组元素,语法格式如下:

delete array_name[index

下面的例子中,数组中的 google 元素被删除(删除命令没有输出):

$ awk 'BEGIN {sites["runoob"]="";sites["google"]=""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)内容,感兴趣的朋友可以关注下。

标签: #数组组加法怎么做出来的