awk从放弃到入门(4):awk格式化

之前的文章举过很多例子,我们也体验到了awk的格式化能力,但是我们的体验并不全面,所以,现在,我们来更加深刻的了解一下awk的格式化能力,在前文的举例中,我们在使用awk时,通常使用print 对文本进行输出,但是动作print 只能实现简单的文本输出功能,并不能对文本格式进行改变,如果想要改变文本的格式,则需要awk中的另一个动作,此动作与print很像,它就是printf,没错,看到printf,你肯定会想到printf命令,或者想到了C语言中的printf()函数,如果你想到了这些,那么使用printf对你来说应该不在话下了,如果你并没有接触过printf命令或者printf()函数,没有关系,你可以先阅读如下连接对应的文章,即可学会printf命令的使用方法

printf命令详解

 

在阅读本文后面的内容之前,请先确保你已经阅读了如下文章:

printf命令详解

 

在阅读本文后面的内容之前,请先确保你已经掌握了awk的相关基础知识,如果你还没有掌握它,建议按照顺序参考如下连接中的文章:

AWK命令总结之从放弃到入门

 

利用awk中的printf动作,即可对文本进行格式化输出,printf动作的用法与printf命令的用法非常相似,只是有略微的不同而已,不过,我们还是从最简单的示例开始看起,首先对比一下print动作与printf动作的区别,示例如下

awk从放弃到入门(4):awk格式化

没错,printf动作与printf命令一样,都不会输出换行符,默认会将文本输出在一行里面。

 

聪明如你一定想到了,既然printf动作的用法与printf命令一样,那么,printf动作有没有printf命令中所谓的"格式替换符"呢?

必须有啊,"格式替换符"是什么我们就不再赘述了,因为在printf命令详解中已经详细的解释过它,那么我们来使用"格式替换符"来指定一下$1的格式,示例如下。

awk从放弃到入门(4):awk格式化

如果只看上图中红线标注的部分,你肯定会认为,这就是printf命令的用法,只是printf动作与printf命令在语法上唯一的不同点就是,在使用printf动作时,指定的"格式"与列($1)之间需要用"逗号"隔开,而使用printf命令时,指定的格式与传入的文本不需要使用"逗号"隔开,如下图所示

awk从放弃到入门(4):awk格式化

其实,它们还有一些其他的不同之处,我们在使用printf命令时,当指定的格式中只有一个"格式替换符",但是传入了多个参数时,那么这多个参数可以重复的使用这一个格式替换符,示例如下

awk从放弃到入门(4):awk格式化

但是在awk中,我们则不能这样使用,在awk中,格式替换符的数量必须与传入的参数的数量相同,换句话说,格式替换符必须与需要格式化的参数一一对应,示例如下。

awk从放弃到入门(4):awk格式化

好了,这就是awk中printf动作在使用时的一些注意点。

 

我们来总结一下,在awk中使用printf动作时,需要注意以下3点。

1)使用printf动作输出的文本不会换行,如果需要换行,可以在对应的"格式替换符"后加入"\n"进行转义。

2)使用printf动作时,"指定的格式" 与 "被格式化的文本" 之间,需要用"逗号"隔开。

3)使用printf动作时,"格式"中的"格式替换符"必须与 "被格式化的文本" 一一对应。

 

好了,我们来看一些小示例,练练手。

 

我们可以利用格式替换符对文本中的每一列进行格式化,示例如下。

awk从放弃到入门(4):awk格式化

 

我们可以利用awk的内置变量FS,指定输入字段分隔符,然后再利用printf动作,进行格式化,示例如下。

awk从放弃到入门(4):awk格式化

上例完美的体现了awk的格式化能力,因为awk本身负责文本切割,printf动作负责格式化文本,双剑合璧了。

 

继续扩展一下,可以利用awk的begin模式,结合printf动作,输出一个像样的表格,下图中用到的"修饰符"此处不再赘述,如果不明白,参考printf命令详解

awk从放弃到入门(4):awk格式化

 

其实话说回来,只要能够灵活的使用printf命令,再结合printf动作使用时的3个注意点,即可快速灵活的掌控它,好了,关于awk的格式化能力,就暂时总结到这里,希望这篇文章能够对你有所帮助。

猜你喜欢

转载自blog.csdn.net/liang5603/article/details/80855503