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记录一下当时的下标

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • intellij idea 2021激活码_在线激活

    (intellij idea 2021激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    36
  • 二叉树层次遍历算法——C/C++

    二叉树层次遍历算法——C/C++二叉树层序遍历1、算法思想用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:访问该元素所指向的节点若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束…

    2022年6月5日
    24
  • JSONArray转换成List<T>

    JSONArray转换成List<T>常用的方法:1.首先有一个JSONArray对象,比如是jsonArrayJSONObjectjsonObject1=newJSONObject();JSONObject1.put(“username”,”zhangsan”);JSONObjectjsonObject2=newJSONObject();JSONObject2.put(“username”,”lisi”);JSONArrayjsonArray=newJSONArray();jsonArray.add(j

    2022年6月23日
    45
  • uva-10487 – Closest Sums

    uva-10487 – Closest Sums

    2022年2月2日
    50
  • 在官网下载最新版Java

    在官网下载最新版Java在Oracle官网下载最新版Java1.进入oracle官网https://www.oracle.com2.点击下拉菜单中的java3.点击如图所示4.点击最新版的javase5.若要下载其他版本,则拉滚动条至最下方,点击如图所示6.各个版本的JavaSE都展示出来了,如图所示,这里下载JavaSE9为例7.勾选下方的AcceptLicenseAgreement,否…

    2022年7月7日
    37
  • linux中文镜像文件iso下载地址,linux系统镜像iso文件下载

    linux中文镜像文件iso下载地址,linux系统镜像iso文件下载Asp.NetCore–基于声明的授权翻译如下:当创建身份时,其可以被分配由可信方发布的一个或多个声明.索赔是名称值对,表示主题是什么,而不是主体可以做什么.例如,您可能有驾驶执照,由当地驾驶执照颁发.您的驾驶执照上有您的出生日期…优秀IT技术文章集(最新)(高质量)作者:赵磊博客:h…

    2022年5月10日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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