awk报告生成器详解
AWK: Aho, Weinberger, Kernighan --> New AWK, NAWK
基本用法:gawk [options] 'program' FILE ..
[options]为选项:
-F:指明输入时用到的字段分隔符;
-v var=value: 自定义变量;
'program' 可以理解为对文本的操作方法。
格式:PATTERN{ACTION STATEMENTS}
PATTERN,模式匹配,支持正则表达式。用于地址定界。
ACTION,操作命令,如print
STATEMENTS,指操作命令输出的内容。
FILE ..;进行操作的文本文件。
~]# awk -F: '{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root or Sysuser: %s\n",$1}}' /etc/passwd
分析:
1.if($3>=1000),这是条件判断语句,$3表示第三个字段。如果为真,就执行{printf "Common user: %s\n",$1}。
2.如果为假,就执行{printf "root or Sysuser: %s\n",$1}
3.注意{}的嵌套使用。
~]# awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd
分析:
1.if($NF=="/bin/bash"),这是条件判断表达式。
$NF,表示当前行的最后一个字段。
==,表示字符串匹配。
2.如果判断结果为真,就执行print $1
~]# awk '{if(NF>5) print $0}' /etc/fstab
分析:
1.if(NF>5),这是条件判断表达式,判断字段数量是否大于5.
2.如果为真,就执行print $0。
$0,表示所有字段。
~]# df -h | awk -F[%] '/^\/dev/{print $1}' | awk '{if($NF>=20) print $1}'
分析:
1.df -h | awk -F[%] '/^\/dev/{print $1}'
-F[%],表示以%未分隔符,
/^\/dev/,这是地址定界,表示匹配以/dev开头的行。
对符合定界的行,执行{print $1}
2.awk '{if($NF>=20) print $1}'
if($NF>=20),这是条件判断,$NF>=20,判断最后一个字段的数值是否大于20.
如果为真,就执行print $1,这里没有明确指明分隔符,就使用默认的空格做分隔符。
使用场景:对awk取得的整行或某个字段做条件判断;
- pint 操作
- 2.2 自定义变量
- 3、printf命令
- 格式符:
- 修饰符:
- -: 左对齐
- +:显示数值的符号
- 4、操作符
- 算术操作符:
- 字符串操作符:没有符号的操作符,字符串连接
- 赋值操作符:
- 比较操作符:
- 模式匹配符:
- 逻辑操作符:
- 函数调用:
- 条件表达式:
- 5、PATTERN
- (4) line ranges:行范围,
- (5) BEGIN/END模式
- BEGIN{}: 仅在开始处理文件中的文本之前执行一次;
- END{}:仅在文本处理完成之后执行一次;
- 6、常用的action
- 7、控制语句
- 7.1 if-else
- 7.2 while循环
- 7.3 do-while循环
- 7.4 for循环
- 7.5 switch语句
- 7.6 break和continue
- 7.7 next
- 8、array
- 9、函数
- 9.1 内置函数