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

  • A+
所属分类:linux基础

在本博客中,AWK是一个系列文章,本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点。

awk系列博文直达链接:AWK命令总结之从放弃到入门(通俗易懂,快进来看)

 

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的格式化能力,就暂时总结到这里,希望这篇文章能够对你有所帮助。

 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:7   其中:访客  4   博主  3

    • avatar 9527 1

      非常棒的博客,难得!
      大拇指(赞)送给你。

      • avatar 易知难 4

        签到!博主有没有一些企业案例啊!我也打算做运维!

          • avatar 朱双印 Admin

            @易知难 其实博文中有些举例就是平常会用到的实际场景
            只是大家认为文章就是文章,不会有什么案例,其实只要活学活用了,很多都可以有实际应用的
            加油~~

          • avatar echo 5

            打卡 学习

              • avatar 朱双印 Admin

                @echo 有毅力!加油~

                  • avatar drgcaosheng 3

                    @朱双印 我是不是也要学这位echo兄弟进行打卡呢!哈哈,看完iptables继续awk了,虽然之前也了解一些,但是博主的文章看完后会再加深一些记忆,理解。写得很明白。