awk 流程控制

if单分支
统计/etc/passwd文件中UID小于或等于1000的用户个数:
awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd
统计/etc/passwd文件中UID大于1000的用户个数:
awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd
统计/etc/passwd文件中解释器使用/bin/bash的用户个数:
awk -F: '{if($7~/\/bin\/bash$/){i++}}END{print i}' /etc/passwd

if双分支
分别统计/etc/passwd文件中UID小于或等于1000的用户个数、UID大于1000的用户个数:
awk -F: '{if($3<=1000){i++}else{j++}}END{print i , j}' /etc/passwd
分别统计/etc/passwd文件中解释器使用/bin/bash的用户个数、不是/bin/bash的个数:
awk -F: '{if($7~/\/bin\/bash$/){i++}else{j++}}END{print i,j}' /etc/passwd

awk数组

awk数组要与shell数组注意区分
1)数据的语法格式
数组是一个可以存储多个值的变量,具体使用的格式如下:
定义数组的格式:array_name[0]=value0
调用数组的格式:array_name[index]
遍历数组的用法:for(变量 in 数组名){print 数组名[变量]}
awk 'BEGIN{a[0]=10;a[1]=20;print a[0],a[1]}'
数组的下标和值都可以是字符
awk 'BEGIN{a[0]="saf";a["asdf"]=20;print a[0],a["asdf"]}'
awk的for循环使用
awk 'BEGIN{a[1]=11;a[2]=22;a[3]=33;for (i in a){print i,a[i]}}'

awk '{a[$1]++}END{for (i in a){print i,a[i]}}' txt3 //可以用来分析日志访问量

注意
sort 正序
sort -r 倒序
-k 按指定的列进行排序。
-n 依照数值的大小排序。

posted @ 2022-07-14 18:55  菜鸟成长历程  阅读(64)  评论(0编辑  收藏  举报