主机知识库
分享服务器知识

awk数组怎么在Linux系统中使用

今天我就来和大家聊聊如何在Linux系统中使用awk阵列,可能很多人都不太懂。为了让你更好地了解,本站为你总结了以下内容,希望你能从这篇文章中有所收获。

1.awk数组描述

在其他编程语言中,数组的下标从0开始。也就是说,如果要引用回数组中的第一个元素,就需要引用对应的下标[0]。在awk中,数组也指下标,但是在awk中,数组的下标是从1开始的。在其他语言中,您可能习惯于先“声明”一个数组。在awk中,你不必这样做。)

2.声明数组时,值可能很多,命令太长,降低了命令的可读性。所以反斜杠“\”用来换行,效果一模一样。代码如下:

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’ \

;arr[4]=’四’;printarr[3]} ‘

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;arr[4]=’四’;printarr[3]} ‘

三个3。数组的元素被设置为null,这是允许的。当数组中没有元素并且被直接引用时,默认情况下它被赋为null。因此,要判断一个元素是否存在,不能采用数组元素的值为null的方法,而应采用以下方法:

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;if(4 inar){ print ‘ fourintisharr ‘ } } ‘

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;if(3 inarr){ print ‘ three in isarr ‘ } } ‘

三进制也可以反过来(用运算符!)

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;if(!(4 inar)){ print ‘ fournotithisarr ‘ } } ‘

Fournotinthisarr4.awk数组下标

在awk中,数组的下标不仅可以是“数字”,还可以是“任意字符串”。其实awk中的数组本来就是“关联数组”。之所以用数字做下标,是为了方便之前的习惯,做好过渡。但是用数字作为数组下标在某些场景下有一定的优势,但本质上也是“关联数组”。awk默认为“数字”

5.删除数组元素

使用删除删除数组中的元素,或删除整个数组

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;\

delete arr[1];printarr[1]} ‘

_ _ _ _ _ _ _(空)

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;\

print arr[1];print arr[3];deletearrprintarr[1]} ‘

一个

_ _ _ _ _ _ _(空)6。使用for循环遍历数组

语法:for(数组名中的变量){code语句}

注意:变量循环数组的下标

[ZK PK @ master as]$ awk ‘ BEgin { arr[1]=’ one ‘;arr[2]=’ two ‘;arr[3]=’三’;arr[4]=’四’;\

for(iinarr){printarr[i]}} ‘

一个

#无序打印数组元素,输入

一步证明其是“关联数组”
#有序的打印数组元素
[zkpk@masteras]$awk'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four";\
for(i=1;i<=4;i++){printarr[i]}}'
one
two
three
four

7.awk数组使用实例

[zkpk@masteras]$awk'BEGIN{a=1;printa;a=a+1;printa}'
1
2
[zkpk@masteras]$awk'BEGIN{a=1;printa;a++;printa}'
1
2

将变量a设置为1,对其进行自加运算,则其数值会增加1,这不难理解,那么如果变量a是一个字符串哪?

[zkpk@masteras]$awk'BEGIN{a="test";printa;a++;printa}'
test

当a的值为字符串时,竟然也可以参与运算,而且可以看出,字符串被当成数字0参与运算,那么空字符串参与运算时也会被当成0运算吗?

[zkpk@masteras]$awk'BEGIN{a="";printa;a++;printa}'
____(空)

结果显示,空字符串在参与运算时也会被当做数字0,之前我们说过,当我们引用数组中一个不存在的元素,元素被赋值成空字符串,当对这个元素进行自加运算时,元素的值就变成了1,因此当我们对一个不存在的元素进行自加运算后,这个元素的值就变成了自加的次数,自加x次,元素的值就被赋值为x,自加y次元素的值就被赋值为y,所以我们可以通过awk数组的这个特性来统计文本中某字符串出现的次数,代码如下所示

[zkpk@masteras]$cattext
Alice
Bob
Tom
Peter
Alice
Alice
Tom
Bob
Peter
Bob
[zkpk@masteras]$awk'{count[$1]++};END{for(iincount){printi,count[i]}}'text
Bob3
Tom2
Alice3
Peter2

这回你该发现awk数组这个特性的强大所在了吧,好,也许你会说我不用awk照样可以统计啊,代码如下所示:

[zkpk@masteras]$cattext|sort|uniq-c
3Alice
3Bob
2Peter
2Tom

好吧,我承认你这个思路很棒,但是你看看下面例子哪?统计文本中人名出现的次数

[zkpk@masteras]$cat-tEtext
Alice^IBob$
Bob^IAliceAlicePeter$
TomBob$
PeterAlice$
AliceTom$
Alice^I^ITom$
TomPeter$
BobBob$
PeterAlice$
BobAliceAliceTom$
#我们可以看出上面的文本中人名之间的分隔符有制表符,也有空格,来吧,统计人名出现的次数吧,
#我使用awk数组的方式可以这样统计
[zkpk@masteras]$awk'{for(i=1;i<=NF;i++){count[$i]++}}END{for(jincount)\
{printj,count[j]}}'text
Bob6
Tom5
Alice9
Peter4

但若你不用awk,非得用其他命令实现可以参考如下代码( ^_^ )

[zkpk@masteras]$cattext|tr-s"\t"""|tr-s"""\n"|sort|uniq-c
9Alice
6Bob
4Peter
5Tom

看完上述内容,你们对awk数组怎么在Linux系统中使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

(服务器内容来源于IDC同行,若侵权,请联系我们删除)

赞(0)
文章名称:《awk数组怎么在Linux系统中使用》
文章链接:https://www.cmy.cn/host/16467.html
版权声明:茶猫云所有发布的内容,部分为原创文章,转载请注明来源!网络转载文章如有侵权请联系我们解决!
最新优惠:茶猫云VPS服务器