grep 模糊搜索
vim 增删改查,交互式
sed 增删改查,非交互式
awk 精确搜索
1, 前置命令 | awk 选项 (条件)指令
2, awk 选项 (条件)指令 被处理的文件
选项 -F 指令 print
awk内置变量 $1 $2 $3 ... $0 NR NF "常量"
awk条件
1, 使用正则
/ / ~ !~
2, 使用数字和字符串
== != > < >= <=
3, 逻辑组合
&& ||
4,运算
+ - * / % a++ a+=x
-------------------------------------------------------
if(条件){指令}
if(条件){指令1}else{指令2}
if(条件1){指令1}else if(条件2){指令2}else{指令n}
awk -F: '{if($3==0){print}}' user 如果第3列是0,则输出该行
awk -F: '{if($3<=2){print "abc"}else{print "xyz"}}' user 如果第3列小于等于2,则输出abc,否则输出xyz
统计用户uid 小于10的和大于1000的数量
awk -F: 'BEGIN{x=0;y=0}{if($3<10){x++}else if($3>1000){y++}}END{print x,y}' /etc/passwd
统计用户uid 小于10的和大于1000的数量,以及其他的数量
awk -F: 'BEGIN{x=0;y=0;z=0}{if($3<10){x++}else if($3>1000){y++}else{z++}}END{print x,y,z}' /etc/passwd
--------------------------------------------------------------------
分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数:
awk -F: '{if($7=="/bin/bash"){x++}else{y++}}END{print x,y}' /etc/passwd
---------------------------------------------------------------------
数组 能够存储多个不同值的特殊变量
数组名称[下标]=值
a[1]=100
a[2]=200
awk 'BEGIN{a[1]=100;a[2]=200;print a[1],a[2]}' 定义数组a,下标分别是1与2,然后输出该数组对应下标的值
awk 'BEGIN{a[1]=100;a[2]=200;print a[2],a[1]}'
awk 'BEGIN{a[1]=100;a[1]++;print a[1]}' 对定义好的数组做运算
-------------------
遍历数组
for(变量 in 数组名){print 变量, 数组名[变量]}
awk 'BEGIN{a[1]=100;a[2]=200;for(i in a){print i,a[i]}}
abc a[abc]=1 ip[192.168.0.1]=1
abc a[abc]=2 ip[192.168.0.1]=2
xyz a[xyz]=1 ip[192.168.0.2]=1
opq a[opq]=1 ip[192.168.0.3]=1
xyz a[xyz]=2 ip[192.168.0.2]=2
abc a[abc]=3 ip[192.168.0.1]=3
awk '{a[$1]++}END{for(i in a){print i,a[i]}}' abc
{a[$1]++} 逐行任务,相当于收集数据,然后在END任务中用for循环查看数组的所有内容
awk '{ip[$2]++}END{for(i in ip){print i,ip[i] }}' abc
------------------------------------------------------
yum -y install httpd
curl http://server0 以字符形式查看网站
/var/log/httpd/access_log httpd服务的访问日志
awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log |sort -nr 查看网站的被访问次数,与对应的ip地址, 然后降序排列
------------------------------------------------------------
uptime |awk '{print "当前主机cpu平均负载是 "$NF}'
ifconfig eth0 | awk -F[\(\)] '/RX p/{print "eth0 网卡的接收流量是 "$2}'
ifconfig eth0 | awk -F[\(\)] '/TX p/{print "eth0 网卡的发送流量是 "$2}'
free -h |awk '/Mem/{print "当前主机内存剩余空间是 "$4}'
df -h | awk '/vda1/{print "当前主机根分区剩余空间是 "$4}'
awk 'END{print "当前主 机用户数量总共是 "NR"个" }' /etc/passwd
x=`who | wc -l`
echo "当前主机登录账户 的数量是 $x 个"
p=`ps aux |wc -l`
echo "当前主机开启的进程数量是 $p 个"
n=`rpm -aq | wc -l`
echo "当前主机安装的软件包数量是 $n 个"
-------------------------------------------------------
uptime |awk '{print "当前主机cpu平均负载是 "$NF}'
ifconfig eth0 | awk -F[\(\)] '/RX p/{print "eth0 网卡的接收流量是 "$2}'
ifconfig eth0 | awk -F[\(\)] '/TX p/{print "eth0 网卡的发送流量是 "$2}'
free -h |awk '/Mem/{print "当前主机内存剩余空间是 "$4}'
df -h | awk '/vda1/{print "当前主机根分区剩余空间是 "$4}'
awk 'END{print "当前主 机用户数量总共是 "NR"个" }' /etc/passwd
x=`who | wc -l`
echo "当前主机登录账户 的数量是 $x 个"
p=`ps aux |wc -l`
echo "当前主机开启的进程数量是 $p 个"
n=`rpm -aq | wc -l`
echo "当前主机安装的软件包数量是 $n 个"
-----------------------------------------------------------------------