awk命令

6月 8, 2020 |

命令结构

awk [option -F ":"] '[BEGIN {cmd}] /regex/ {cmd} [END {cmd}]'
选项:比如field separator
BEGIN 和 END块是可选的,只执行一次
主体为"/regex/ {cmd}" 用正则表达式过滤行,然后对匹配正则表达式的行 执行括号内的命令
注意防止shell的扩展,awk的命令请写在单引号

示例1:统计passwd中含r的行数
awk -F ":" '/r/ {cnt++} END {print cnt}' < /etc/passwd
示例2:提取passwd中的用户名
awk -F ":" '{print $1}' < /etc/passwd
示例3:解析top输出中的cpu的空闲率
top -b -n1 |awk -F "," '/%Cpu\(s\)/ {print $4}' |awk 'match($0,/([0-9]+)/) {print substr($0, RSTART,RLENGTH)}'
top -b运行在batch 模式下,
match($0,/([0-9]+)/)组捕获模式
substr($0, RSTART,RLENGTH) 输出捕获的内容

示例4:分组计数,分组求和(分析日志中每个IP出现的次数)
awk '{arr[$1]++} END{for(x in arr) printf("%s|%d\n", x, arr[x])}' apache_qxu1606530096_20200620.log |sort -t '|' -n -r -k 2,2
示例5: 解析ini 文件, 先用sed提取section, 然后过滤出非注释,长度大于0且非[]行
sed -n '/\[realServer\]/,/\[.*\]/p' config.ini |awk "! /^#/ && NF>0 && ! /\[.*\]/{print}"

Posted in: Linux

Comments are closed.