频道栏目
首页 > 资讯 > 浏览器 > 正文

格式化打印(二)

15-06-29        来源:[db:作者]  
收藏   我要投稿

 

printf语句可以规定输出域的宽度和对齐方式。一个格式表达式由3个可选的修饰符组成,跟在"%"后面,并出现在格式说明符之前。

%-width.precision format-specifier

描述输出字段宽度的width是一个数值。当指定域宽度时,这个域的内容默认为向右对齐。必须指定"-"来设置左对齐。因此, "%-20s" 输出的走向左对齐的一个域长度为20个字符的字符串,如果字符串少于20个字符,那么这个域将用空格来填满。在下面的例子中,输出一个"1"来指示输出域的真实长度。第一个例子是右对齐的文本:

printf("|%10s|\n", "hello")

结果是:

| hello|

下一个例子是左对齐的文本:

printf("|%-10s|\n", "hello")

结果是:

|hello |

precision修饰符用于十进制或浮点数,用于控制小数点右边的数字位数。对于字符串型值,它用于控制要打印的字符的最大数量。注意,数值的默认precision值为"%.6g" 。

可以根据print或printf的参数列表中的值,动态地指定宽度width和精度precision。通过用星号实际的值来实现这个功能:

printf("%*.*g\n",5,3,myvar);

在这个例子中,宽度是5,精度为3,要打印的值来自myvar。

print语句输出数值的默认精度可以通过设置系统变量OFMT来改变。例如,如果使用awk打印报告,其中包含美元($)数值,可以将OFMT设置为"%.2f" 。

使用格式表达式的完整语法可以解决filesum中的各个字段和标题的对齐问题。我们在文件名前输出文件大小的一个原因,就是以这种顺序输出字段对齐的可能性更大,在很大程度上它们可以自己对齐。printf提供给我们的解决方法能够回定输出域的宽度,因此,每个域在相同的列开始。

我们来重新调整filesum报告的输出域。我们希望得到最小的域宽度使得第二个域在相同的位置开始。域宽度应放置在%和转换说明符之间。"%-15s"规定域的宽度为15个字符并且字符左对齐。"%10d"中没有连字符,是右对齐的,这就是我们所希望的十进制值的表示。

printf("%-15s\t%10d\n" , $9, $5)

这将产生一个报告,其中的数据按列对齐并且数字是右对齐的。看一下printf语句在END中是如何被应用的:

printf("Total: %d bytes (%d files)\n" , sum, filenum)

在BEGIN规则中的标题也被适当地改变了。通过使用printf语句。filesum产生如下的结果:

$ ./filesum g*
FILE BYTES
g 23
gawk 2237
gawk.mail 1171
gawk.test 74
gawkro 264
gfilesum 610
grades 64
grades.awk 231
grepscript 6
Total: 4680 bytes (9 files)
相关TAG标签
上一篇:Nagios监控mysql服务器详细实现过程
下一篇:Linux内核之于红黑树andAVL树
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站