前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell脚本之awk数组

shell脚本之awk数组

作者头像
全栈程序员站长
发布2022-09-09 10:37:32
7360
发布2022-09-09 10:37:32
举报
文章被收录于专栏:全栈程序员必看

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

一.数组格式

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

代码语言:javascript
复制
abc[1]=”xiaohong”
abc[2]=”xiaolan”

解释:

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

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

代码语言:javascript
复制
[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:打印出所有元素的下标

代码语言:javascript
复制
[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";for (i in a)print i;}'
0
1

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

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

代码语言:javascript
复制
 [root@localhost ~]#:awk -F: '{ 
   {a[NR]=$1;}{print NR,a[NR];}}' /etc/passwd

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

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[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最后的值一定是最大的,也就是重复次数最多的。但是我们此时不知道下标(也就是

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.数组格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档