awk数组

awk数组AWK数组一.数组格式数组是一个包含一系列元素的表.格式如下:abc[1]=”xiaohong”abc[2]=”xiaolan”解释:abc:为数组名称[1]、[2]:为数组元素下标

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

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 ~]#  awk ‘{array[$1]++} END {for(key in array) print array[key],key}’ a |sort -k 2 -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

 

那我们再来说说上边例子中的array[$1]++

(1)Awk在读取第一行的时候,会读取这个数组,此时的数组是这样的:a[192.168.3.1]++

(2)此时a[192.168.3.1]的值是未定义的。

但是由于后边有运算符号++。Awk会将数字0自动赋值给a[192.168.3.1]。然后在做++运算

(3)此时a[192.168.3.1]做++ ,也就是0+1得到的值为1

(4)那么在读第二个192.168.3.1时,此时a[192.168.3.1]的值已经经过上次运算为1.此时在做一次运算。也就是1+1 现在a[192.168.3.1]的值为2。

(5)总结,最后的值是多少,也就意味着,192.168.3.1运算了多少次,也意味着192.168.3.1出现了多少次。

 

 

 

 

 

 

执行过程就如下:

[root@tab0 ~]# awk ‘{a[$1]++;print a[$1]}’ a

1

1

1

1

1

1

1

2

2

2

3

4

3

5

2

3

4

6

4

5

 

 

 

其实这与let i++ 是同理

[root@tab0 ~]# i=0

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

1

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

2

[root@tab0 ~]# let i++

[root@tab0 ~]# echo $i

3

 

例子5:解释一下awk解决去重问题

[root@tab0 ~]# awk ‘! a[$1]++’ 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

 

其实要解释这个问题,只需要弄清楚awk中的“真”与“假”。

在awk中,以下3种情况是“假”,其他情况都为“真”

1) 数字 0

2) 空字符串

3) 未定义的值

[root@tab0 ~]# awk ‘BEGIN{a=0;if(a) print “true”;else print “false”}’

False

[root@tab0 ~]#  awk ‘BEGIN{a=””;if(a) print “true”;else print “false”}’

False

[root@tab0 ~]#  awk ‘BEGIN{if(a) print “true”;else print “false”}’

False

 

以上的个例子说明了只要a的值为数字0、空字符串、未定义的值都为假,也就是条件都不成立

 

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

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

(0)
上一篇 2022年7月1日 上午6:16
下一篇 2022年7月1日 上午6:16


相关推荐

  • 寄存器寻址入门

    寄存器寻址入门寄存器寻址指令的地址码部分给出某一个通用寄存器的编号 Ri 这个指定的寄存器中存放着操作数 其寻址过程如图 5 3 所示 图中的 IR 表示指令寄存器 它的内容是从主存中取出的指令 操作数 S 与寄存器 Ri 的关系为 这种寻址方式具有两个明显的优点 1 从寄存器中存取数据比从主存中存取快得多 2 由于寄存器的数量较少 其地址码字段比主存单元地址字段短得多 这种方式可以缩短指令长度 提高指令的执行速度 几乎所有的计算机都使用了寄存器寻址方式 总结寄存器寻址快

    2026年3月19日
    2
  • PyCharm基本使用 – 新建项目并书写运行文件 – 图解

    PyCharm基本使用 – 新建项目并书写运行文件 – 图解在工作场景下 程序员如何运用 PyCharm 去书写代码以及运行文件 主要分为三块来讲解 第一是新建项目 第二是新建文件并书写代码 第三是运行文件 看结果 一 新建项目打开 PyCharm 点击新建项目 NewProject 选择项目根目录和 Python 解释器的版本 点击创建 Create 即可完成新建一个项目 界面选项设置和讲解 Location 存新建项目的地方 地址 存放位置可以是自己电脑任意位置 前提是自己能找到的位置 你可以新建一个

    2026年3月27日
    3
  • Pycharm控制台乱码问题解决办法之一

    Pycharm控制台乱码问题解决办法之一Ctrl Alt S 打开 settingsEdit 把 GlobalEncodi 和 ProjectEncod 都改为 GBK 注意啦 是 GBK GBK GBK 百度到好多答案说改成 UTF 8 不过好像并不普遍适用 所以如果改成 UTF 8 也不行的话 可以试试这个办法啦 希望能帮到大家啦

    2025年12月15日
    8
  • webstorm 使用git(git管理工具的安装与使用)

    该篇主要介绍在webstorm中怎么使用git工具,需要学习git的请找别的教程,具体的目前只介绍常用的代码拉取和提交,后续在进行更新(不一定会)webstorm中的git操作主要在VCS中;判断项目中是否有git仓库,下面两个图项目文件夹有没有git仓库,鼠标点击VCS时如下图所示;没有git仓库有git仓库3.新建git仓库,如下图,点击CreateGitRe…

    2022年4月13日
    721
  • Vim编辑器的安装与使用[通俗易懂]

    Vim编辑器的安装与使用[通俗易懂]1、导读下面给大家讲解一下Linux/ununtu系统下的文本编辑神器——vim编辑器的安装及基本使用方法。2、安装vim编辑器如果没有安装vim编辑器的,可在终端下输入一下命令进行安装:sudoapt-getinstallvim安装过程中提示:[y/n]?时,回复“y”即可!3、简单理解vim编辑器的工作模式vim编辑器可以简单分为“命令…

    2025年7月9日
    5
  • Cursor无限续杯教程:试用期重置方法

    Cursor无限续杯教程:试用期重置方法

    2026年3月16日
    57

发表回复

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

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