一、awk(逐行处理)
1.功能与grep类似,语法和sed类似
2.格式
awk [选项] '条件{指令}' 文件
awk 'BEGIN{} 条件{} ND{}' 文件
BEGIN:读文件前执行(一般用与初始化)
{}:逐行读入时执行相应的处理
END:读文件后执行
3.指令
—print 打印
awk的内置变量:
$0 一整行
$1 第一列
NF 当前有几列
NR 当前行的行号
#也可以当作echo21来用,直接在print后面"接东西'',可以和变量同时执行,用,分隔。
4.选项
—-F #指定分隔符,默认为空格,如-F:
—-v #使用外部的shell变量
awk -v X=2 '$1=x{print $2}' 文件 #当使用外部变量作条件时,不用加$
5.条件的表达形式
—正则表达式
~匹配 !~不匹配
awk '$1~/root/{命令}' #从第一列匹配root
—数值、字符串比较
awk '$1=="root"{命令}' #精确查找第一列为root
—逻辑比较
&&逻辑与、||逻辑或
—运算符
—条件判断
awk'{if($1=="M.Tansley")$6=$6-1;print$1"\t"$6"\t"$7}' #如果第一列为M.Tansley,第六列减一
二. awk的if判断
1.单分支:if(){}
双分支:if(){}else{}
多分支:if(){} else if () {} else....
— awk '{if($7==/bin/bash) {x++} else{y++}} END{print x,y}' /etc/passwd #统计能登陆的用户和不能登陆的数量。
2.while () {}
3.求词出现的频率
awk -F:'{i=1;while(i<=NF){if($i==”root“){x++};i++}} END{print x}' /etc/passwd #统计文件中出现了几次root,""为精确匹配~//为模糊u匹配
三、数组
与shell基本相同。下标i可以是字符串
统计一列中数据出现的频率:
公式:awk '{变量[$1]++}' #统计,$1是统计第一行,可以更换
END{for(i in IP){print i,IP[i]}} 文件 #打印,for循环中。循环的是IP的下标
#\t:想要隔开时用来隔开,相当与Tab
#######################################################################
—df | awk '/\/$/{print $4}' #根分区剩余容量
free | awk '/Mem/{print $4}' #存剩余容量
uptime | awk '{print $8}' #CPU负载
ifconfig enp1s0 | awk '/pack/{print$5}' #网卡流量
—[root@server0 ~]# awk -F: 'BEGIN{print"用户名\tUID\tShell"} /bash$/{print$1"\t"$3"\t"$7;i++} END{print "总用户量:",i}' /etc/passwd
用户名 UID Shell
root 0 /bin/bash
student 1000 /bin/bash
总用户量: 2 #打印表格
— awk '{if($7==/bin/bash) {x++} else{y++}} END{print x,y}' /etc/passwd #统计能登陆的用户和不能登陆的数量。
文本剑客awk使用
最新推荐文章于 2024-04-17 11:54:56 发布