运维——三剑客awk(二)
在第一篇AWK博客中学习了awk的基本格式和基本的用法,再来复习一下他的基本格式:
awk [options] 'program' file ...
其中program有两部分组成:pattern 和 {action statement;...}
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明
action 主要是print 和printf
之前已经了解过print 本次来学习printf(列和列之间的对齐)
printf命令
格式化输出:printf “FORMAT”, item1, item2, ...
(1) 必须指定FORMAT
(2) 不会自动换行,需要显式给出换行控制符,\n
(3) FORMAT中需要分别为后面每个item指定格式符
格式符:与item一一对应
%c: 显示字符的ASCII码
%d, %i: 显示十进制整数
%e, %E:显示科学计数法数值
%f:显示为浮点数
%g, %G:以科学计数法或浮点形式显示数值
%s:显示字符串
%u:无符号整数
%%: 显示%自身
修饰符:
#[.#]:第一个数字控制显示的宽度(即输出多少个字符或数字);
第二个#表示小数点后精度%3.1f
-: 左对齐(默认右对齐)+:显示数值的正负符号
既然是格式化输出那么一定要有格式,如果没有格式会怎么样呢?
此时用printf如果没有指定格式那么就是上面这个情况,所以我们在使用printf之前必须要对其格式进行定义(定义之前请认真学习上面的内容)
操作符
算术操作符:
x+y, x-y, x*y, x/y, x^y, x%y
-x: 转换为负数
+x: 转换为数值
字符串操作符:没有符号的操作符,字符串连接
赋值操作符:
=, +=, -=, *=, /=, %=, ^=
++, --
下面两语句有何不同
awk ‘BEGIN{i=0;print ++i,i}’输出结果为 1 1
awk ‘BEGIN{i=0;print i++,i}’输出结果为 0 1
逻辑操作符:与&&,或||,非!
示例:
awk –F: '$3>=0 && $3<=1000 {print $1}' /etc/passwd
awk -F: '$3==0 || $3>=1000 {print $1}' /etc/passwd
awk -F: ‘!($3==0) {print $1}' /etc/passwd
awk -F: ‘!($3>=500) {print $3}’ /etc/passwd
之前要进行计算可以使用bc,现在也可以使用print来计算例如:
赋值操作符
逻辑操作符
i有值为真,没有值为假,输出结果1为真,0为假
条件表达式(三目表达式):
condition?if-true-expression:if-false-expression
先判断条件,如果条件为真执行问号后的语句,如果条件为假执行冒号后的语句
例:
模式匹配符:
~:左边是否和右边匹配包含 !~:是否不匹配
查找包含root的行并以冒号为分隔符输出第一个字段
查找不包含root的行并以冒号为分隔符输出第一个字段