1. if 判断
shell中的if语句结构:
if [条件];then
echo 'hello'
else
echo 'nihao'
fi
在awk 中的if结构:
if(3>1){}
if(3>x){a}else{b}
if(3>6){a} else if(3>5){b} else{c}
if(3>1){a;b};c #c 肯定会执行
awk '{if(){} else{}}' 文件
统计系统中uid大于和小于500 的人数
awk -F ':' '{if($3>500){x++} else{y++}} END{print x,y}' /etc/passwd
shell的思路如下:
x=0,y=0
if [ $3>500 ];then
let x++
else
let y++
fi
判断能登录系统和不能登录系统的用户数量,并且显示可登录的用户名
awk -F ':' '{if($7~/bash$/){x++;print $1} else{y++}} END{print x,y}' /etc/passwd
2. while循环,for循环
awk '{i=1;while(i<=NF){print NF,i;i++}}' a.txt #变量的初始值为1,若i小于等于NF(列数),则执行打印语句,且i增加1。直到i的值大于NF.
awk '{for(i=1;i<NF;i++)print NF,i}' a.txt #作用同上
统计/etc/passwd 中user出现了多少次
awk -F ':' '{i=1;while(i<=NF){if($i~/user/){x++};i++}} END{print x}' /etc/passwd
统计nginx的访问量
awk '{IP[$1]++} END{for(i in IP){print i,IP[i]}}' /var/log/access.log | sort -n
或者
awk '{print $1}' /var/log/access.log | sort | uniq -c
uniq 忽略文件中的重复行,-c 显示重复的次数
sort 排序,-n 按照数值大小排序