# awk从放弃到入门（4）：awk格式化

- 15

- A+

所属分类：Linux基础

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

awk系列博文直达链接：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动作的区别，示例如下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我的微信公众号
关注"实用运维笔记"微信公众号，当博客中有新文章时，可第一时间得知哦~
赞 91
赏
分享

- awk

- 版权声明：本站原创文章，于2017年3月26日14:58:04，由 朱双印 发表，共 1714 字。
- 如需转载，请在文章头部注明出处：awk从放弃到入门（4）：awk格式化 | 朱双印博客

awk从放弃到入门（11）：拾遗之”三元运算”与”打印奇偶行”
awk从放弃到入门（10）：awk内置函数
awk从放弃到入门（9）：awk数组详解
awk从放弃到入门（8）：awk动作总结之二

### 发表评论取消回复

欢迎 pangzi 再次光临！
修改信息

正在提交, 请稍候...
#

昵称*

邮箱*

网址

有回复时邮件通知我

## 目前评论：15 其中：访客 12 博主 3

2. nedu 0
   回复 2019年11月10日 下午4:05 沙发

   大神，想请教您，如何把一列的数据都添加单引号呢？没有查到这个用法。谢谢。

   - yys3439 1
     回复 2019年11月25日 下午3:24 1层

     @nedu printf “‘%s’\n” 你试一下

     - harrycat 0
       回复 2020年6月4日 下午3:30 2层

       @yys3439 printf “\047%s\047\n” ，需要用到单引号的八进制编码。

4. Postale 1
   回复 2019年8月14日 上午8:19 板凳

   膜拜大湿，还是大湿“技术”高深

6. 千寻 0
   回复 2019年6月20日 下午7:11 地板

   谢谢博主的分享

8. 略微抖动 2
   回复 2019年6月13日 下午3:07 4楼

   看了好多了，都通俗易懂 666

10. 吹笛生的小牧童 1
    回复 2019年2月19日 下午4:55 5楼

    暖贴一下

12. 9527 1
    回复 2018年7月6日 上午9:08 6楼

    非常棒的博客，难得!
    大拇指（赞）送给你。

14. 易知难 4
    回复 2017年7月28日 下午3:55 7楼

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

    - 朱双印 Admin
      回复 2017年7月28日 下午11:51 1层

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

16. echo 6
    回复 2017年6月20日 下午9:52 8楼

    打卡 学习

    - 朱双印 Admin
      回复 2017年6月21日 上午12:06 1层

      @echo 有毅力！加油~

      - drgcaosheng 4
        回复 2018年6月10日 下午11:49 2层

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

        - 朱双印 Admin
          回复 2018年6月11日 上午9:00 3层

          @drgcaosheng 666，兄弟捧场了，加油，共勉~~

        - blackhuuu 0
          回复 2019年6月15日 上午12:22 3层

          @drgcaosheng 我也是百度Iptables，然后看下来的

- 文章目录

×
×
拖拽到此处
图片将完成下载