shell脚本之awk数组

shell脚本之awk数组一.数组格式数组是一个包含一系列元素的表.格式如下:abc[1]=”xiaohong”abc[2]=”xiaolan”解释:abc:为数组名称[1]、[2]:为数组元素下标,可以理解为数组的第1个元素、数组的第2个元素xiaohong、xiaolan:元素值例子1:定义数组,并且打印数组元素[root@tab0~]#awk’BEGIN{a[0]=”xiaohong”;a[1]=”xiaolan”;printa[0]}’xiaohong[root@tab0~]#awk

大家好,又见面了,我是你们的朋友全栈君。

一.数组格式

数组是一个包含一系列元素的表.
格式如下:

abc[1]=”xiaohong”
abc[2]=”xiaolan”

解释:

abc:为数组名称
[1]、[2]:为数组元素下标,可以理解为数组的第1个元素、数组的第2个元素
xiaohong、xiaolan:元素值

例子1:定义数组,并且打印数组元素

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[0]}'
xiaohong

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[1]}'
Xiaolan

例子2:打印出所有元素的下标

[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";for (i in a)print i;}'
0
1

解释:将a定义为循环中的取值列表。从数组中取出的是数组的所有元素的下标

例子3:我们将/etc/passwd/里边的第一类定义成数组

 [root@localhost ~]#:awk -F: '{ 
   {a[NR]=$1;}{print NR,a[NR];}}' /etc/passwd

例子4:利用数组统计每一个IP的访问量

[root@tab0 ~]# cat a
192.168.3.1
192.168.3.2
192.168.3.3
192.168.3.4
192.168.3.5
192.168.3.6
192.168.3.7
192.168.3.1
192.168.3.2
192.168.3.3
192.168.3.3
192.168.3.3
192.168.3.2
192.168.3.3
192.168.3.6
192.168.3.6
192.168.3.6
192.168.3.3
192.168.3.2
192.168.3.2

解决办法1:

[root@tab0 ~]# sort a |uniq -c | sort -nr
      6 192.168.3.3
      5 192.168.3.2
      4 192.168.3.6
      2 192.168.3.1
      1 192.168.3.7
      1 192.168.3.5
      1 192.168.3.4

解决办法2:

[root@tab0 ~]# cat test.sh
#!/bin/bash
awk '{ 
   
	list[$1]++
}
END { 
   
	max=0;
	for(i in list){ 
   
		if (list[i] > max)
		{ 
   
			max=list[i];s=i
		}	
	}
	print max,s
}' a

解释:

list是一个数组,以$1为下标做++运算,也就是说,当$1内容重复一次,它的值就+加一次。
max初始值是0 ,然后用数组中的每一个元素的值去和max比较,如果比max大,就把这个元素的值赋值给max,那么max最后的值一定是最大的,也就是重复次数最多的。但是我们此时不知道下标(也就是$1的内容)是多少,所以用s记录一下当时的下标

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161662.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号