awk数组详解、实战
1.其它编程语言数组的下标一般从0开始,awk中数组下标默认从1开始,也可以从0开始设置:
awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃";huluwa[3]="三娃";print huluwa[1]}' 二娃 awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃";huluwa[3]="三娃";huluwa[4]="";print huluwa[4]}' 第二条命令没有内容输出
2.在awk中,元素的值设置为"空字符串"是合法的,所以不能用元素值是否为空,判断该元素是否存在于数组中.
当一个元素不存在于数组时,引用该元素,awk会自动创建这个元素,为这个元素赋值为空字符串, 所以引用一个不存在于数组的元素时,这个元素已经被赋值了,也就是已经存在了. awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃";huluwa[3]="三娃";huluwa[4]=""; if(5 in huluwa){print "第6个元素存在就能看到这句话"}}'
3.使用语法if(下标 in 数组名),可以判断数组中是否存在对应的元素.
awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃";huluwa[3]="三娃";huluwa[4]=""; if(!(5 in huluwa)){print "第6个元素存在就能看到这句话"}}' 第6个元素存在就能看到这句话
4.用delete可以删除数组中的元素,也可以删除整个数组
awk 'BEGIN{huluwa["yiwa"]="大娃";huluwa["erwa"]="二娃"; huluwa["sanwa"]="三娃";print huluwa["yiwa"];delete huluwa["yiwa"];print huluwa["yiwa"]}' 大娃awk 'BEGIN{huluwa["yiwa"]="大娃";huluwa["erwa"]="二娃"; huluwa["sanwa"]="三娃";print huluwa["yiwa"];delete huluwa;print huluwa["yiwa"]}' 大娃
5.两种for循环
awk 'BEGIN{huluwa[1]="大娃";huluwa[2]="二娃";huluwa[3]="三娃"; huluwa[4]="四 娃";for(i=1;i<=4;i++){print i,huluwa[i]}}' 1 大娃 2 二娃 3 三娃 4 四娃 awk 'BEGIN{ huluwa["yiwa"]="大娃";huluwa["erwa"]="二娃";huluwa["sanwa"]="三 娃"huluwa["siwa"]="四娃";for(i in huluwa){print i,huluwa[i]} }' siwa 四娃 yiwa 大娃 erwa 二娃 sanwa 三娃
发现数组其实是无序的,可以把它当成python中的字典.
6.数组应用1:
awk 'BEGIN{ a=1; print a; a++; print a}' 1 2 当字符串或者空字符串参与运算时,将被当做数字0. awk 'BEGIN{ a="test"; print a; a++; print a; a++; print a}' test 1 2 awk 'BEGIN{ a=""; print a; a++; print a; a++; print a}'1 2 引用数组中一个不存在的元素时,元素被赋值为空字符串,参与运算时被当做0使用 awk 'BEGIN{ print a["ip"]; a["ip"]++;a["ip"]++; print a["ip"]}'2
统计ip出现的次数:
# cat test10 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.12 192.168.1.3 192.168.1.3 192.168.1.2 192.168.1.4 192.168.1.12 192.168.1.1 # awk '{count[$1]++} END{for(i in count) {print i,count[i]} }' test10 192.168.1.12 2 192.168.1.1 2 192.168.1.2 2 192.168.1.3 3 192.168.1.4 1
awk实现统计ip次数
7.数组应用2:
# cat test4 zhangsan lisi wangwu zhaoliu zhouqi zhangsan wangwu lisi zhaoliu # awk '{ for(i=1;i<=NF;i++){a[$i]++} } END{ for(j in a){print j,a[j]} }' test4 zhaoliu 2 zhangsan 2 wangwu 2 lisi 2 zhouqi 1
awk统计名字出现次数
8.数组应用3:
# cat a.txt 李四|000002 张三|000001 王五|000003 赵六|000004 # cat b.txt 000001|10 000001|20 000002|30 000002|15 000002|45 000003|40 000003|25 000004|60 # awk -F '|' 'NR == FNR{a[$2]=$1;} NR>FNR {print a[$1],"|", $0}' a.txt b.txt # awk -F "|" 'NR == FNR{a[$2]=$1;next}{print a[$1],"|",$0}' a.txt b.txt # awk -F "|" 'NR == FNR{a[$2]=$0;next}{print a[$1]"|"$2}' a.txt b.txt 张三 | 000001|10 张三 | 000001|20 李四 | 000002|30 李四 | 000002|15 李四 | 000002|45 王五 | 000003|40 王五 | 000003|25 赵六 | 000004|60
数组的活学活用
解释说明:
在NR == FNR时,也就是在处理前四行时,将数组的格式变成:
a={"000002":"李四","000001":"张三","000003":"王五","000001":"赵六"},
处理剩下的行时,用a[$1]去找姓名,再加上每一行内容就是想要的内容.
9.内置函数(用到时再研究)
常用的算数函数--rand、srand、int; 字符串函数--sub、gsub替换某些文本,length函数获取指定字符串长度; index函数获取的到指定字符串在整个字符串中的位置; split函数可以将指定的字符串按照指定的分隔符分割,将每段内容赋值到数组中,从而动态的创建数组.
10.三元运算
三元运算语法:条件?结果1:结果2
使用变量usertype接收了三元运算后的返回值,当条件成立时,usertype被赋值为"系统用户",反之为"普通用户" awk -F: '{ usertype=$3<500?"系统用户" : "普通用户"; print $1,usertype}' /etc/passwd 表达式1?表达式2:表达式3 awk -F: '{$3<500?a++:b++}END{print a,b}' /etc/passwd
11.打印奇偶行
# cat test11 第 1 行 第 2 行 第 3 行 第 4 行 第 5 行 第 6 行 第 7 行 第 8 行 第 9 行
test11文件内容
a.当使用了模式时,如果省略了对应的动作,会默认输出整行.
awk '$2>7' test11 第 8 行 第 9 行
b.awk中,0或空字符串表示'假',非0值或非空字符串表示'真'.
# awk '1{print $0}' test3 hello helllo # awk '1' test3 hello helllo # awk '0' test3 什么也不会输出 # awk '!0' test3 0取反,即为真 hello helllo # awk 'i=1' test3 hello helllo
c.awk开始处理第一行,i被初始化,值为空,模式为假,所以i=!i,是将取反后的值又赋给了i,
此刻i的值为真,在awk处理第一行文本时i为真,且省略了动作,就会打印第一行内容;
在处理第二行时,将在第一行时为真的i取反,此时i为假,故第二行没有被打印.
awk 'i=!i' test11 第 1 行 第 3 行 第 5 行 第 7 行 第 9 行 awk '!(i=!i)' test11 或 awk 'a=!(i=!i)' test11 第 2 行 第 4 行 第 6 行 第 8 行
12.awk数组统计状态
# 先解释split和数组时怎样结合的: awk -v ts="dawa;erwa;sanwa" 'BEGIN{ split(ts,huluwa,";");for(i in huluwa){print i,huluwa[i]} }' 1 dawa 2 erwa 3 sanwa # split按照指定的分隔符切割字符串,将切割后的字段赋值到元组中,键是数字,值是对应字段. netstat -pnta 2>&1|grep 'ESTABLISHED'|head | awk '{ split($5,a,":");b=a[1];c=a[2];{print b,c} }' 127.0.0.1 6025 127.0.0.1 6026 127.0.0.1 6025 127.0.0.1 6023 127.0.0.1 6025 127.0.0.1 6023 127.0.0.1 6023 127.0.0.1 6026 127.0.0.1 9090 127.0.0.1 6025 # 统计ESTABLISHED(已建立的连接)的远程ip: netstat -pnta 2>&1|grep 'ESTABLISHED'|awk '{split($5,a,":");b=a[1];count[b]++}END{for(i in count)print i,count[i]}
13.注意几点书写:
不同模式之间用{}隔开;
数字的运算、判断放在()中;
数组的运算放在{}中;
print放在{}中.
参考博客:https://www.cnblogs.com/xudong-bupt/p/3721210.html
参考博客:https://www.cnblogs.com/jiqianqian/p/7944013.html
朱双印的博客写的很详细,通俗易懂:http://www.zsythink.net/archives/2093
转载于:https://www.cnblogs.com/fawaikuangtu123/p/10008645.html
awk数组详解、实战相关推荐
- awk从放弃到入门(9):awk数组详解
这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章. 注:在阅读这篇文章之前,最好已经了解了一些开发的基本语法,比如,for循环.数组的基本使用 等,否则在阅读 ...
- linux传递数组到awk,awk从放弃到入门(9):awk数组详解
在本博客中,AWK是一个系列文章,本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点. 这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章. 注:在阅读 ...
- linux——awk(7):awk数组详解
awk中数组的使用.我们在其他语言中经常会使用到数组,awk中也可以使用.示例如下: 与其他不同的是,awk中的数组元素值可以设置为"空字符串",当设定某一个元素为"空字 ...
- Linux文本处理必杀技之awk应用详解
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母 ...
- linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- shell awk命令详解
shell awk命令详解 awk原理 格式 实操 相关内建变量 简易需求 进阶操作 高阶操作 awk原理 逐行读取文本,默认时以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中, ...
- 深度学企业linux awk命令详解与应用(下篇)
开篇语: 我们在<一篇速学企业linux awk命令详解与应用(上篇)>中介绍了 awk 的基本用法,其实在awk 脚本程序中,还支持使用一些编程语言,比如变量.数组.分支结构(if-th ...
- php遍历关联数组详解,php遍历关联数组
php 动态关联数组,PHP 反射API,php遍历关联数组,php关联数组的输出 PHP数组详解_计算机软件及应用_IT/计算机_专业资料.PHP数组语法及其应用详细讲解,深入的探讨了数组的用法,以 ...
- linux awk命令根据分隔符输出,Linux运维知识之Linux awk命令详解
本文主要向大家介绍了Linux运维知识之Linux awk命令详解,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. awk :适用程序,一种unix工具 就是一个强大的文本分析工 ...
最新文章
- 【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
- linux 运行msi文件是什么意思,查看Msi文件内容
- export default (imported as router) was not found_HTC 5G Hub 流动Router 评测分享
- Java Web笔记之Struts2.1 +Hibernate3.3 +Spring3.0
- 两阶段聚合(局部聚合+全局聚合)
- (组合数求模=乘法逆元+快速幂) Problem Makes Problem
- 7 CO配置-控制-一般控制-维护版本
- 怎么不保存退出、保存退出vim、vi编辑
- 【读书笔记】【独立思考】2018-03-14
- Pandas系列(五)对缺失值的处理
- 使用KELI调试单片机代码时,一定要用Open Project的方式打开。
- nRF24L01模块——基于Arduino
- ENVI遥感图像监督分类与出图制作
- Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
- ubuntu 安装GPU黑屏 修改GRUB_Windows 10 amp; Ubuntu 18.04LTS双系统安装
- 基于单片机的自行车码表设计
- 自学iOS开发的一些经验
- 十分nb且详细的Elasticsearch教程
- 常犇_专访丨《河神》制片人常犇:走夜路不怕黑,做好剧别怕累
- 三星Galaxy S22、三星Galaxy22+和三星Galaxy22 Ultra区别