案例场景:/etc/passwd 第一列、第三列、最后一列
awk -F":" '{printf "%-20s%-3s%15s\n",$1,$3,$NF}' /etc/passwd
案例场景:获取内存信息、IP地址信息、磁盘分区信息
内存信息:
free -h|awk '/^Mem/{printf"已使用内存:%s\n当前空闲内存:%s\n内存使用率:%.2f%\n",$4,$3,$3/$2*100}'
IP地址:
ip address show eth0 |awk -F" +|/" '/inet/{printf"IP地址:%s\n",$3}'
磁盘信息:
df -h|awk -v i=0 -F" +|/" '/\/dev\/(nvm|sdb)/{i++ ;printf"%s.分区名称:%s\t大小:%s\t已使用:%s\t使用率:%s\n",i,$3,$4,$5,$7}'
案例场景:做简单循环,写一个九九乘法表并统计运行时间,以及比较shell for循环的运算时间
time(awk 'BEGIN{for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf"%s*%s=%s\t",i,j,i*j;if(j==i){printf"\n"} }}}')
time(for((i=1;i<=9;i++)) ;do for(( j=1;j<=i;j++)) ;do echo -en "$i*$j=$((i*j)) " ; if(($i==$j)) ;then echo -e "\n" ;fi ;done ;done)
案例场景:做多循环运算再统计运行时间,比较shell for循环运算时间
time(awk -v num=0 'BEGIN{for(i=1;i<=1000000;i++){ num+=i};print num}')
time( num=0;for((i=1;i<=1000000;i++)) ;do let num=$((num + i)) ;done ;echo $num)
案例场景:统计用户访问站点IP的个数,以apache日志为例
cat /var/log/httpd/access_log-20220828|awk '{ ips[$1]++ }END{for(i in ips){print i,ips[i]}}'