我们编写的许多脚本可以很好地实现对数据的操作,但没有对输出进行适当的格式化。这是因为基本的print语句所能做的工作有限。因为awk的大多数功能是产生报告,因此以整齐的样式产生格式化报告是很重要的。程序filesum可以很好地处理数据,但它的报告缺乏整齐的格式。
awk提供的printf可以代替print语句,printf是借用了C程序设计语言。printf语句和print语句一样可以打印一个简单的字符串。
awk ‘ BEGIN { printf ("Hello, world\n") }‘
首先可以看出,printf和print的主要区别是printf没有提供自动换行功能。必须明确地为它指定"\n" 。
printf语句的完整语法由两部分组成:
printf ( for mat-expression [, arguments] )
其中的圆括号是可选的。第一部分是一个用来描述格式的表达式,通常以引号括起的字符串常量的形式提供。第二部分是一个参数列表,例如变量名列表,它和格式说明相对应。在格式说明前面有一个百分号(%) ,而格式说明符号为下表列出的字符之一。两个主要的格式说明符是s和d, s表示字符串,d表示十进制整数
在printf的格式说明符
格式说明符 | 功能 |
---|---|
%c |
打印单个ASCII 字符
printf("The character is %c\n",x) 输出: The character is A |
%d |
打印一个十进制数
printf("The boy is %d years old\n",y) 输出:The boy is 15 years old |
%e |
打印数字的e 记数法形式
printf("z is %e\n",z) 打印: z is 2.3e+0 1 |
%f |
打印一个浮点数
printf("z is %f\n", 2.3 * 2) 输出: z is 4.600000 |
%o |
打印数字的八进制
printf("y is %o\n",y) 输出:z is 17 |
%s |
打印一个字符串
print("The name of the culprit is %s\n",$1) 输出:The name of the culprit is Bob Smith |
%x |
打印数字的十六进制值
printf("y is %x\n",y) 输出:x is f |
下例在程序filenum的规则2中用printf产生一个输出。它输出不同的两个字段上的字符串和十进制值:
printf("%d\t%s\n", $5, $9)
该语句输出$5的值,后面是制表符\t和$9、然后输出一个换行符(\n)。对每个格式说明必须提供一个相应的参数。
参考资料:http://www.linuxawk.com/communication/526.html
版权声明:本文为博主原创文章,未经博主允许不得转载。