| |
|
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/5 7:22:05- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |