Linux基础知识 ·

Linux文本三剑客之awk优雅地输出

[隐藏]

优雅地输出

前面我们已经用过了 AWK 中的 print 函数与 printf 函数,它们将数据输出到标准输出流中。其实 printf 函数的功能远比我们前面演示的强大。这个函数是从 C 语言中借鉴来而的,主要用于生成格式化的输出。下面是 printf 的使用方法:

其中,fmt 是字符串常量或者格式规格说明字符串,expr-list 是与格式说明相对应的参数列表。

转义序列

与一般字符串一样,格式化字符串也能内嵌转义序列。 AWK 支持的转义序列如下:

换行符

下面的例子中使用换行符将 Hello 与 World 分开输出到独立两行:

执行上面的命令可以得到如下的结果:

水平制表符

如下示例,使用制表符显示不同的域:

执行上面的命令可以得到如下的结果:

垂直制表符

如下示例,使用垂直制表符输出不同域:

执行上面的命令可以得到如下的结果:

退格符

下面的例子中,我们在每个域输出后都再输出退格符(最后一个域除外)。这样前三个域的每一域的最后一个字符都会被删除。比如说,Field 1 输出为 Field。因为最后一个字符被退格符删除。不过Field 4可以正常显示,因为在Field 4输出后没有输出退格符。

执行上面的命令可以得到如下的结果:

回车

下面的例子中,我们在每个域输出后输出一个回车符,随后输出的域会覆盖之前输出的内容。也就是说,我们只能看到最后输出的 Field 4。

执行上面的命令可以得到如下的结果:

换页符

下面的例子中每个域后输出后输出一个换页符:

执行上面的命令可以得到如下的结果:

格式说明符

与 C 语言一样,AWK 也定义了格式说明符。 AWK 的 printf 允许如下的格式的转换:

%c

输出单个字符。如果参数是个数值,那么数值也会被当作字符然后输出。如果参数是字符串,那么只会输出字符串的第一个字符。

执行上面的命令可以得到如下的结果:

%d 与 %i

输出十进制数的整数部分。

执行上面的命令可以得到如下的结果:

%e 与 %E

以 [-]d.dddddde[+-]dd 的格式输出浮点数。

执行上面的命令可以得到如下的结果:

%E 格式使用 E 而不是 e。

执行上面的命令可以得到如下的结果:

%f

以 [-]ddd.dddddd 的格式输出浮点数。

执行上面的命令可以得到如下的结果:

%g 与 %G

输出浮点数,使用 %e 或 %E 转换。但它们会删除那些对数值无影响的 0。

执行上面的命令可以得到如下的结果:

%G 使用 %E 格式化,而不是 %e。

执行上面的命令可以得到如下的结果:

%o

无符号八进制输出。

执行上面的命令可以得到如下的结果:

%u

无符号十进制数输出。

执行上面的命令可以得到如下的结果:

%x 与 %X

输出十六进制无符号数。%X 中使用大写字母,%x 使用小写字母。

执行上面的命令可以得到如下的结果:

使用 %X 的输出结果如下:

执行上面的命令可以得到如下的结果:

%%

输出百分号(%),不需要输入参数。

执行上面的命令可以得到如下的结果:

%的可选参数

% 可以使用如下可选参数:

宽度

输出域会被填充满足宽度要求。默认情况下使用空格字符填充。但是,当标志 0 被设置后会使用 0 填充。

执行上面的命令可以得到如下的结果:

前导零

紧接在 % 后的零被当作标示,表示输出应该使用零填充而不是空格字符。请注意,只有当域的宽度比要求宽度小时该标示才会有效。示例如下:

执行上面的命令可以得到如下的结果:

左对齐

输出域被设置为左对齐。当输出字符串字符数比指定宽度少时,你可能希望在输出它时能左对齐。比如,在右边添加空格符。在 % 之后数字之前使用减号(-)即可指定输出左对齐。下面的例子中,AWK 的输出做为 cat 的输入,在 cat 中输出行结束符号($)。

执行上面的命令可以得到如下的结果:

符号前缀

输出数值的符号,正号也输出。

执行上面的命令可以得到如下的结果:

哈希(Hash)

使用 Hash 可以为 %o 的结果前添加0,为 %x 或 %X 输出的结果前添加 0x 或 0X (结果不为零时),为 %e,%E,%f,%F添加小数点;对于 %g 或 %G,使用哈希可以保留尾部的零。使用示例如下:

执行上面的命令可以得到如下的结果:

参与评论