参考:
awk命令初级、高级篇(详细)_i鲸落i的博客-CSDN博客_awk
awk语法格式
awk [选项] '条件{动作} 条件{动作} ... ...' 文件名
内置变量
变量名 | 描述 |
FILENAME | 当前输入文档文件名 |
FNR | 当前输入文档的当前行号,有多个输入文档时有用 |
NR | 输入数据流的当前行号 |
$0 | 当前行的全部数据内容 |
$n... | 当前行的第n个字段 |
NF | 当前记录(行)的字段(列)个数 |
FS | 字段分隔符,默认为空格或Tab制表符 |
OFS | 输出字段分隔符,默认为空格 |
ORS | 输出记录分隔符,默认为换行符\n |
RS | 输入记录分隔符,默认为换行符\n |
ARGC | 命令行参数个数 |
ARGV | 数组,保存的是命令行所给定的各个参数 |
awk参数
参数 | 说明 |
-F | 指定分隔字段符 |
-v | 定义或修改一个awk内部变量,指定变量或默认值 |
-f | 从脚本文件中读取awk命令 |
awk条件匹配
关系运算符 | 说明 |
---|---|
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
~ | 匹配正则 |
!~ | 不匹配正则 |
注意:/正则表达式/
awk 'NR==3,NR==5 {print NR,$0}' alx.txt
awk 'BEGIN{FS="[:,]"} \
/version/{print "serverVersion:" $NF} \
/number/{print "serverName:" $NF} \
/OS/{print "osName:" $(NF-2);print "osVersion:" $NF}' nowcoder.txt
awk模糊匹配
参数 | 说明 |
~ | 模糊匹配 |
awk -F ":" '$1 ~ "gx"{print $0}' /etc/passwd
#注意“~”匹配查询,后面关键字要用引号引起来一定要双引号
awk命令之控制流写法
if | 判断控制语句 |
for | 循环语句 |
while | 循环语句 |
do...while | 循环 |
循环控制语句 | break #只有break可以用 |
awk之if判断语句
awk -F: '{if($3<1000){x++} else{y++}} END{print "系统用户个数:"x"","普通用户个数:"y""}' /etc/passwd
awk之for循环
awk -F: '{ \
for(i=1;i<=NF;i++) \
> {if($i=="root") x++} \
> } END {print x}' /etc/passwd
#统计root出现的次数
awk之while循环
awk 'BEGIN{ \
i=0;
while(i<=5) { \
i++; \
if(i==3) {continue}; \
print i \
}; \
} \
END {print "END"}' /tmp/hosts
awk数组
awk 'BEGIN{ \
> a[0]=1;a[11]=22;a["book"]=32;a["work"]="home"; \
> for(i in a){print i,a[i]} \
> }'
注意:输出是无序的。i是索引,a[i]是值
awk数组例程:
awk ' \
{IP[$1]++} \
END { \
for (i in IP) {print i,IP[i]} \
}' /var/log/nginx/access.log