基础语法
num | 符号 | 语意 |
---|---|---|
1 | FS | 指定分隔符,默认为空格 |
2 | $n | 分隔符的第n个字段 |
3 | $0 | 读入整行的文本内容 |
4 | NF | 列数 |
5 | NR | 行数 |
num | 终端命令 | 语意 |
---|---|---|
1 | awk ‘{print $1,$2,$3}’ /etc/passwd | 打印第1,2,3列 |
2 | awk -F ‘{print $1,$2,$3}’ /etc/passwd | 打印第1,2,3列 |
3 | awk -F ‘{print NF}’ /etc/passwd | 打印列数 |
4 | awk -F ‘{print $NF}’ /etc/passwd | 打印最后一列 |
5 | awk -F ‘{print $(NF-1)}’ /etc/passwd | 打印倒数第2列 |
5 | awk -F ‘{print “输出中文”$1}’ /etc/passwd | 打印汉字 |
num | 符号 | 语意 |
---|---|---|
1 | BEGIN{} | 初始化 |
2 | {} | 逐行处理 |
3 | END{} | 结束处理 |
num | 终端命令 | 语意 |
---|---|---|
1 | awk ‘BEGIN{a=100;print a+12}’ | 打印初始化后的计算结果 |
2 | awk ‘{BEGIN{x=0} /bash$/{x++} END{print x}’ /etc/passwd | |
3 | awk -F: ‘BEGIN {print NR} END{print NR}’ /etc/passwd | 打印开始、结尾行号 |
4 | awk -F: ‘{x++;print x}’ /etc/passwd | 打印行号 |
使用案例
num | 终端命令 | 语意 |
---|---|---|
1 | free | awk ‘/Mem/{print $NF}’ /etc/passwd | 监测内存信息 |
2 | df -h | awk ‘//$/{print $4}’ /etc/passwd | 监测磁盘信息 |
3 | LANG=C lscpu | grep “^CPU(s)” | awk -F: ‘{print $2}’ | 输出cpu数 |
4 | LANG=C lscpu | grep "Mode | name " | awk -F: ‘{print $2}’ | 输出Mode信息 |
5 | uptime | awk -F: ‘{print $NF}’ | 输出15分钟负载 |
6 | ifconfig ens32 | grep “RX p” |
7 | {awk ‘/Failed/{print $11}’ /var/log/secure | 打印日志暴力破解登录的IP地址 |
条件判断
num | 终端命令 | 语意 |
---|---|---|
1 | awk -F: ‘/^root/{print}’ /etc/passwd | 打印root开头的行 |
2 | awk -F: ‘ 7 ! / b a s h 7!~/bash 7! /bash/{print $1,$7}’ /etc/passwd | 打印结尾不是bash的第1,7列 |
3 | awk -F: ‘$1==“root”{print}’ /etc/passwd | 打印第1列是root的行 |
4 | awk -F: ‘$3>3000"{print}’ /etc/passwd | 打印第3列大于3000的行 |
5 | awk -F: ‘$3>=0 && $3<5 "{print}’ /etc/passwd | 打印第3列大于等于0且小于5的行 |
6 | awk -F: ‘$1==’“root” || $3>=0 "{print}’ /etc/passwd | 打印第1列是root或第3列大于等于0的行 |
7 | awk ‘$NR%2==0’ /etc/passwd | 打印偶数行 |
流程控制
num | 终端命令 | 语意 |
---|---|---|
1 | awk -F: ‘{if($3>=1000){x++} END{print x}}’ /etc/passwd | 打印第3列大于1000的行 |
2 | awk -F: ‘if($1==“root”){print $1,$3}’ /etc/passwd | 打印第1列是root的第1,3列 |
3 | uptime | awk -F: ‘{if($NF >=0.01){pirnt “Cpu load :” $NF }’ /etc/passwd | 打印Cpu的负载大于0.1的值 |
4 | ls -l /etc | awk -F: ‘{if($1~/^-/){x++}else {y++}) END{}}’ | 如果开头是- 就x++,否则y++ |
5 | awk ‘{BEGIN{for(i=5;i+=1;i-=2){print i}}’ | 打印5 3 1 |
数组
num | 终端命令 | 语意 |
---|---|---|
1 | awk ‘BEGIN{name[0]=“root”;name[1]=“one”;print name[0],name[1]}’ | 打印数组 |
2 | awk ‘BEGIN{name[“root”]=20;name[“one”]=33;print name[“root”],name[“one”]}’ | 打印数组 |
3 | awk ‘BEGIN{x[0]=0;x[1]=1;x[2]=2;for(i in x) {print i,x[i]}}’ | 打印数组 |
4 | awk ‘{IP[$1]++} END{for(i in IP ) print i,IP[i]}’ | 打印统计IP地址个数 |
综合案例
num | 终端命令 | 语意 |
---|---|---|
1 | ss -s | awk ‘$1=="UDP"print {$2}’ | 打印udp个数 |
2 | ss -s | awk ‘$1=="TCP"print {$2}’ | 打印tcp个数 |
3 | ss -antlp | awk ‘i++ END{print i}’ | 打印监听个数 |
4 | ss -antp | awk ‘/^ESTAB /i++ END{print i}’ | 打印建立连接个数 |
4 | ss -antpH | awk ‘/^TIME_WAIT /i++ END {print i}’ | 打印time-wait个数 |