awk
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk相关的知识,希望对你有一定的参考价值。
语法格式
awk [选项] ‘条件{指令}‘ 文件
条件可以没有 如果没有条件代表所有条件
指令也可以没有 没有指令即打印整行
不能既没有条件 也没有指令
选项
-F 指定分隔符
awk 默认使用空格或tab作为分隔符号
awk -F: ‘{print $1}‘ /etc/passwd
awk -F: ‘{print $1,$3,$7}‘ /etc/passwd
#中间以逗号分隔 可以一次打多列
print $0 整行
print $1 第一列
print NR 当前行的行号
print NF 当前行的列数
]# awk -F: ‘{print NR}‘ /etc/passwd
]# awk -F: ‘{print NF}‘ /etc/passwd
]# awk -F: ‘{print NF}‘ /etc/passwd
awk 可以打印常量 (字符串需要引号)
awk 完整命令格式
awk ‘BEGIN{} 条件{} END{}‘ 文件
所有指令都需要放在{}里
BEGIN{} 里的指令 读文件之前 执行一次
中间的 {} 里的指令 在读取文件过程中执行 执行N次
END{} 里的指令 是在读取文件之后 执行一次
只写BEGIN{} 后面可以不加文件
[[email protected] ~]# awk ‘BEGIN{x=0} /nologin$/{x++} END{print x}‘ /etc/passwd
awk 变量可以不定义 就直接用
]# awk ‘/nologin$/{x++} END{print x}‘ /etc/passwd
条件
1/正则/ #默认支持扩展正则
#awk ‘/root/‘ /etc/passwd #全行匹配
#awk -F: ‘$1~/root/‘ /etc/passwd #仅对第一列匹配
~匹配
!~ 不匹配(取反)
]# awk -F: ‘$7!~/bash$/‘ /etc/passwd
#正则 是模糊匹配
2 字串和数字比较 == != < <= > >=
]# awk -F: ‘$1=="root" {print $3}‘ /etc/passwd
]# awk -F: ‘$3<=10‘ /etc/passwd
#注意 字串一定要用引号引起来
#精确匹配
3 逻辑判断 && ||
awk -F: ‘$3>10 && $3<20‘ /etc/passwd
awk -F: ‘$3==0 || $3==1000‘ /etc/passwd
4 算术运算
能被7整除或者包含7的数 1-200
seq 200 | awk ‘$1%7==0||$1~/7/‘
#天然支持小数运算
5 if 语句
if(判断){指令}
if(判断){指令}else{指令}
if(判断){指令}elif(判断){指令}
awk ‘BEING{} 条件{} end{}‘ 文件
统计系统用户和普通用户分别是多少 即UID是否大于1000
]# awk -F: ‘BEGIN{i=0;j=0}{if($3<=1000){i++}else{j++}}END{print i,j}‘ /etc/passwd
6 while
统计词频
判断文件/etc/passwd中 root出现了多少次
awk -F: ‘{命令} END{}‘ /etc/passwd
i=1;while(i<=NF){if($i~/root/){x++};i++}
]# awk -F: ‘{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print x}‘ /etc/passwd
7 实例
awk 公式
#awk ‘{IP[$1]++}END{for(i in IP){print i,IP[i]}}‘
#公式中 除了$1 其他均无需变动
]# awk ‘BEGIN{x[0]=11;x[1]=22 ;print x[0],x[1]}‘
]# ab -c 100 -n 10000 http://172.25.0.11/
模拟100个人,同时访问网站
点击页面1w次
拒绝服务攻击Dos攻击
统计每个IP的访问次数,如果次数大于五百次
]# awk ‘{IP[$1]++}END{for(i in IP){print i"访问了"IP[i]"次"}}‘ /var/log/httpd/access_log
]# awk ‘{IP[$1]++}END{for(i in IP){print i,IP[i]}}‘ /var/log/httpd/access_log | awk ‘$2>=500{print $1}‘
]# awk ‘/Failed password/{print $11}‘ /var/log/secure
]# awk ‘/Failed password/{print $11}‘ /var/log/secure | uniq -c
过滤ssh失败的用户的IP
分区剩余容量 df
内存剩余容量 free
cpu负载 top uptime
top - 09:39:46 up 23 min, 2 users, load average: 0.00, 0.01, 0.10
一分钟 五分钟 十五分钟
根据cpu的内核数量 双核 2 即代表100%的状态运行
1 即代表50%运行
load average 的值取决于cpu的核心
网卡流量 ifconfig
以上是关于awk的主要内容,如果未能解决你的问题,请参考以下文章