| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux文本处理三剑客之awk -> 正文阅读 |
|
[系统运维]linux文本处理三剑客之awk |
4.1特点与应用场景 awk 一门语言,类似于C语言 过滤,统计,计算 过滤,统计日志 4.2 awk内置变量
4.3行与列
? ? 1)取行
2)取列 -F?指定分隔符?指定每一列结束标记(默认是空格,连续的空格,tab键) $数字?取出某一列,注意:在awk中$内容一个意思?表示取出某一列 $0整行的内容, {print?xxx} $NF表示最后一列(示例) awk?'{print?$NF}'?access.log.20220304000301 取网卡地址 只取个ip地址 3)小结 行与列名称 awk取行与列,指哪打哪 取出网卡ip地址 4.4 swk?模式匹配 谁可以作为awk的条件
1)比较表达式-参考上面取行部分 2)正则: 支持扩展正则 awk可以精确到某一列,某一行中包含/不包含.....内容。 ~包含 !~不包含
? ? #找出? 第3列以2开头的行,并显示第1,3和最后一列 找出? 第3列以1或2开头的行,并显示第1列,第3列和最后一列 还有这几种写法 3)表示范围 /哪里开始/,/哪里结束/?常用 NR==1,NR==5??从第1行开始到第5行结束???类似于sed?-n?'1,5p' #显示指定时间(11:02:00到11:02:30)范围内容的ip地址和用户访问uri?column?-t(自动对齐) awk?'/11:02:00/,/11:02:30/{print?$1}'?access.log.20220304000301 awk?'/11:02:00/,/11:02:30/{print?$1,$7,$9,$10}'?access.log.20220304000301?|column?-t 4)特殊模式BEGIN{}和END{}
#统计/etc/services??里面有多少个空行 awk?'/^$/'?/etc/services 统计有多少空行 awk?'/^$/{i++}END{print?i}'?/etc/services #seq?100?求和1+2+3.。。+100?awk实现 seq?100?|awk?'{sum=sum+$1}END{print?sum}' 求和显示过程 seq 100 |awk '{sum=sum+$1;print sum}END{print sum}' 4.5 awk数组
? ? #awk中字母??会被识别为变量,如果只是想使用字符串需要使用双引号引起来?? awk?'BEGIN{a[0]=oldboy;a[1]=liao;?print?a[0],a[1]}' 所以无结果 数字和加双引号可以正常显示 awk数组专用循环打印 [root@heimajinpai?~]#?awk?'BEGIN{a[0]=12306;a[1]="liao";?for(i?in?a)?print?i?}' 0 1 [root@heimajinpai?~]#?awk?'BEGIN{a[0]=12306;a[1]="liao";?for(i?in?a)?print?a[i]?}' 12306 liao [root@heimajinpai?~]#?awk?'BEGIN{a[0]=12306;a[1]="liao";?for(i?in?a)?print?i,a[i]?}' 0?12306 1?liao 案例: http://www.etantian.org/index.html http://www.etantian.org/1.html http://post.etantian.org/2.html http://mp3.etantian.org/3.html http://www.etantian.org/4.html http://post.etantian.org/5.html [root@heimajinpai?test]#?awk?-F"[/]+"?'{print?$2}'?url.txt www.etantian.org www.etantian.org post.etantian.org mp3.etantian.org www.etantian.org post.etantian.org [root@heimajinpai?test]#?awk?-F"[/.]+"?'{print?$2}'?url.txt www www post mp3 www post [root@heimajinpai?test]#?awk?-F"[/.]+"?'{array[$2]++}END{for(i?in?array)print?i,array[i]}'?url.txt www?3(出现的次数) mp3?1(出现的次数) post?2(出现的次数) #array[]++????你要统计什么?[]?里面就是什么(某一列) awk?-F"[/.]+"?'{array[$2]++}END{for(i?in?array)print?i,array[i]}'?url.txt #统计access.log中????每种状态码出现的次数(方式一) awk??'{array[$10]++}END{for(i?in?array)print?i,array[i]}'?access.log.20220304000301?|sort?-rnk2 #统计access.log中????每种状态码出现的次数(方式一) awk?'$10~/[0-9][0-9][0-9]/{array[$10]++}END{for(i?in?array)print?i,array[i]}'?access.log.20220304000301?|sort?-rnk2 注意:使用awk统计日志,尽量精确匹配。
for?n?in?1?2?3 do ????echo?$n done
#1+100 [root@heimajinpai?nginxlog]#?awk?'BEGIN{for(i=1;i<=100;i++)sum+=i;print?sum}' 5050 [root@heimajinpai?nginxlog]# 4.7if 判断 统计磁盘空间使用率,如果大于70%,则提示磁盘空间不足,并显示磁盘分区,磁盘使用率,磁盘挂载点 df?-h?|awk?-F"[?%]+"?'NR>1{if($5>=70)print?"disk?not?enough"}' df?-h?|awk?-F"[?%]+"?'NR>1{if($5>=1)print?"disk?not?enough",$1,$5,$NF}' 注意:awk使用多个条件的时候? 第1个条件可以放在 ‘条件{动作}’ 第2个条件? 一般使用if 面试题:统计这段语句中,单词中字符小于6的单词,显示出来。 4.9总结 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 22:50:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |