3、awk的printf命令
格式:printf format, item1 item2...
要点:
(1) 要指定format;
(2) 输出时不会自动换行,如需换行则需要给出\n;
(3) format用于为后面的每个item指定其输出格式;
(4) format格式的指示符都是%开头,后跟一个字符。
format常用的字符:
%c:显示字符的ASCII码
%d,%i:十进制整数;
%e,%E:科学计数法;
%f:显示浮点数;
%g,%G:以科学计数法格式或浮点数格式显示数值;
%s:显示字符串;
%u:显示无符号整数;
%%:显示%自身。
format中常用修饰符:
#:显示宽度;
-:左对齐;
+:显示数值的符号;
.#:取值精度。
实例1:以固定宽度20输出/etc/passwd文件中前10条记录的用户名和shell信息:
上例中标注的部分含义为:两个字段都是以20个字符的宽度来显示,并且以换行符为每行的结束符。
实例2:将上例中的用户名以左对齐显示:
实例3:将3.14159取2位小数显示:
4、awk的操作符
算术操作符:
x+y:加
x-y:减
x*y:乘
x/y:除
x**(^)y:乘方
x%y:取模
-x:负值
+x:转换为数值
字符串操作符:
连接:无需符号,直接将两个字符串放在一起就可以了;
赋值操作符:
x=y:将y的值赋值给x;
x+=y:将x+y的结果赋值给x;
x-=y:将x-y的结果赋值给x;
x/=y:将x除以y的结果赋值给x;
x%=y:将x与y取模的结果赋值给x;
x^=y或x**=y:将x取y次方的结果赋值给x;
x++:将x+1的结果赋值给x;
x--:将x+1的结果赋值给x;
注:如果模式自身是=号,要写为/=/
比较操作符:
x<y:如果x小于y则为真;
x<=y:如果x小于等于y则为真;
x>y:如果x大于y则为真;
x>=y:如果x大于等于y则为真;
x==y:如果x等于y则为真;
x~y:模式匹配,x能够被y模式所匹配为真。
逻辑操作符:
x&&y:如果x为真则执行y;
x||y:如果x为假则执行y。
条件表达式:
selector ?if-ture-expression: if-false-expression
selector:条件
?if-ture-expression:如果为真则执行此表达式
:if-false-expression:否则执行此表达式
实例4:判断/etc/passwd文件中uid大于500则显示为"Common user",否则显示为“admin user":
5、模式
(1)正则表达式
格式:/PATTERN/
实例5:只显示/etc/passwd文件中存在root的行:
(2)表达式
以比较表达式居多,其结果为非0或非空字符串时满足条件,awk仅处理满足条件的行。
实例6:只显示uid大于等于500的行:
(3)特殊模式
BEGIN:在awk命令的program运行之前执行一次;
END:在awk命令的program运行之后执行一次。
实例6:显示/etc/passwd文件中以root开头的行的用户名在人、UID、shell信息,显示时以逗号分隔各字段,并在输出结果后打印“THE END”。
(5)空模式
用于匹配任意行。