awk内建变量
NF:字段数量
NR:文件行数
FNR:各文件分别统计行数
条件表达式:
selector?if-true-expression:if-false-expression
# awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s:%s\n",$1,usertype}' /etc/passwd
模式
1、/正则表达式/:仅处理能够被此处模式匹配的行
awk ‘/UUID/{print $1}’ /etc/fstab
2、比较表达式,条件为真进行打印,为假则不打印
awk -F '$3>=1000{print $1,$3}' /etc/passwd
3、行范围
awk -F: '/^root/,/myuser$/{print $1}' /etc/passwd
4、BEGIN/END模式
BEGIN{}:仅在开始处理文件中的文本之前执行一次
END{}:仅在问吧处理完成之后执行一次
高级语法:
1、if判断
# awk -F:‘{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root of Sysuser: %s\n",$1}}’ /etc/passwd
2、while循环
# awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i);i++}}’ /etc/grub2.cfg
3、for循环
# awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg