AWK是一个强大的文本分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作;数据可以来自标准输入也可以是管道或文件
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
awk执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、“|表示"或”、"!“表示非” ;还可以进行简单的数学运算,如+、一、*、/、号、^分别表示加、减、乘、除、取余和乘方。
awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容
awk包含几个特殊的内建变量(可直接用)如下所示
按行输出文本
输出所有内容,等同于cat test.txt
awk ‘{print}’ test.txt
awk ‘{print $0}’ test.txt
输出第1~3行内容
awk ‘NR1,NR3{print}’ test.txt
输出第1~3行内容
awk ‘(NR>=1)&&(NR<=3){print}’ test.txt
输出第1行,第3行的内容
awk ‘NR1||NR3{print}’ test.txt
输出所有奇数行的内容
awk ‘(NR%2)==1{print}’ test.txt
输出所有偶数行的内容
awk ‘(NR%2)==0{print}’ test.txt
输出以root开头的行
awk ‘/^root/{print}’ /etc/passwd
输出以nologin结尾的行
awk ‘/nologin$/{print}’ /etc/passwd
统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd
awk ‘BEGIN {x=0};//bin/bash$/{x++};END {print x}’ /etc/passwd
统计以空行分隔的文本段落数
awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt
输出每行中(以空格或制表符分隔)的第三个字段
awk ‘{print $3}’ test.txt
输出每行中第1,3个字段
awk ‘{print $1,$3}’ test.txt
输出密码为空的用户的shadow记录
awk -F ”:” ‘$2==””{print}’ /etc/shadow
输出密码为空的用户的shadow记录
awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow
输出以冒号分隔且第7个字段中包含/bash的行的第一个字段
awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow
输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段
awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services
输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行
awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd
打印文本文件的总行数
awk ‘END{print NR}’ test.txt
打印文本第二行第一列
sed -n “2, 1p” test.txt | awk ‘print $1’
输出文件最后一行
awk -F: ‘{print $NF}’ test.txt
输出文件的倒数第二列以","隔开
awk -F ‘,’ ‘END {print $2}’ test.txt
调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$” /etc/passwd
awk -F: ‘/bash$/{print | “wc -l”}’ /etc/passwd
调用w命令,并用来统计在线用户数
awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’
调用hostname,并输出当前主机名
awk ‘BEGIN {“hostname” | getline ; print $0}’
查看网卡流量
ifconfig ens33 |awk ‘/RX p/{print $5 “字节”}’