三大搜索利器 -- awk
发布时间:2020-12-14 01:34:22 所属栏目:Linux 来源:网络整理
导读:awk 的特点 文本与数据的处理工具; 可编程: 处理灵活,功能强大; ? awk 应用 ? 统计 制表 等 ? awk 处理方式 与 格式 ? awk 处理方式 awk 一次处理一行内容; awk 对每行可以切片处理; awk ‘{print $1}‘ ?????? # 打印输出首个单词,默认是空格分割; ? awk 格
awk 的特点 文本与数据的处理工具; 可编程: 处理灵活,功能强大; ? awk 应用 ?
? awk 处理方式 与 格式 ? awk 处理方式
? awk 格式
? awk 内置参数的应用 ?
? awk 逻辑判断
// 匹配 $1 是以 t 开头的行; awk -F ":" ‘$1~/^t.*/ {print $1}‘ passwd tian // 匹配 $1 不以 t 开头的行; awk -F ":" ‘$1!~/^t.*/ {print $1}‘ passwd root ... ... // 判断 UUID 大于 500 的输出用户名; awk -F ":" ‘$3>500 {print $1}‘ passwd zxjr tian // 判断 UUID 等于 502 的输出用户名; awk -F ":" ‘$3==502 {print $1}‘ passwd tian ? ? awk -- 扩展格式
// 制表显示 passwd 每行的行号,对应行的用户名 awk -F ":" ‘BEGIN{print "Line Col User"}{print NR" "NF" "$1}END{print "------"FILENAME"------"}‘ passwd Line Col User 1 7 root 2 7 bin ... ... 10 7 uucp ... ... ------passwd------ // 比较美观的写法; awk -F ":" ‘BEGIN{print "Line Col User"}{printf("%2s%10s%s%sn"," ",$1)}END{print "------"FILENAME"------"}‘ passwd ... ... Line Col User 1 7 root 2 7 bin ... ... 10 7 uucp ... ... ------passwd------ ? awk -- 案例 ? // ***************************** 案例 一 ******************************** ‘‘‘ 统计当前文件夹下的 文件/文件夹 占用的大小 ‘‘‘ // 定义 size 变量,size 累加文件及目录的大小,打印总和; ls -l |awk ‘BEGIN{size=0}{size+=$5}END{print " Size is: "size}‘ Size is: 1024038984 // 添加单位,进行换算; ls -l |awk ‘BEGIN{size=0} {size+=$5} END{print " Size is: "size/1024"M"}‘ Size is: 1.00004e+06M // ***************************** 案例 二 ******************************** ‘‘‘ 统计显示 passwd 的账户总人数 ( 要考虑空行的可能 ) ‘‘‘ // 开始,定义计数器,匹配排除空行,自加一,结束,打印总数; awk ‘BEGIN{count=0} $1!~/^$/{count++} END{print " Totle: "count}‘ passwd Totle: 28 // ***************************** 案例 三 ******************************** ‘‘‘ 统计显示 passwd 文件中 UUID 大于 100 的用户 ‘‘‘ // 定义计数器,判断 UUID 大于 100; 定义一个数组,将值与用户对应,使用 for 循环打印用户名; awk -F ":" ‘BEGIN{count=0} {if ($3>100) name[count++]=$1} END{for (i=0;i<count;i++) print i,name[i]}‘ passwd 0 abrt 1 saslauth 2 nginx 3 zxjr 4 tian // ****************************** 案例 四 ******************************** ‘‘‘ 统计 netstat -anp 状态下为 LISTEN 和 CONNECTED 的连接数量 ‘‘‘ // 定义计数器,判断状态行等于两种状态时,计数器自加一,打印总数; netstat -anp |awk ‘BEGIN{count=0} {if ($6=="LISTEN"||$6=="CONNECTED") count++} END{print " Connect Totle: "count}‘ Connect Totle: 68 // 状态行匹配两种状态的其中一种,匹配到哪种,哪种自加一,使用 for 循环打印; netstat -anp |awk ‘$6~/CONNECTED|LISTEN/ {sum[$6]++} END{for (i in sum) print " ",i,sum[i]}‘ CONNECTED 64 LISTEN 4 ? ? awk 总结 ??????????????? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |