1 第3.4节:printf格式化字符串输出详解
1.1 引言
在 AWK 语言里,printf
函数是进行格式化输出的关键工具。它借助格式字符串对输出的样式加以控制,格式字符串由普通字符与格式说明符构成。普通字符会按原样输出,而格式说明符则用于明确要输出数据的类型和格式。接下来,我们将对 printf
支持的格式字符串展开详细剖析。
1.2 基本格式说明符
1.2.1 整数类型
1.2.1.1 1. %d
或 %i
以十进制整数形式输出。
示例代码:
echo "10" | awk '{ printf "The number is %d\n", $1 }'
输出结果:
The number is 10
这里,$1
代表输入的第一个字段,%d
把这个字段以十进制整数的形式输出。
1.2.1.2 2. %o
以八进制整数形式输出。
示例代码:
echo "10" | awk '{ printf "The octal number is %o\n", $1 }'
输出结果:
The octal number is 12
因为十进制的 10 转换为八进制就是 12。
1.2.1.3 3. %x
或 %X
以十六进制整数形式输出,%x
输出小写字母,%X
输出大写字母。
示例代码:
echo "255" | awk '{ printf "The hexadecimal number is %x and %X\n", $1, $1 }'
输出结果:
The hexadecimal number is ff and FF
十进制的 255 转换为十六进制是 FF,%x
使其以小写形式输出,%X
以大写形式输出。
1.2.2 浮点数类型
1.2.2.1 1. %f
以小数形式输出浮点数,默认保留 6 位小数。
示例代码:
echo "3.14159" | awk '{ printf "The floating - point number is %f\n", $1 }'
输出结果:
The floating - point number is 3.141590
即使输入的浮点数小数位数不足 6 位,%f
也会在末尾补 0 到 6 位。
1.2.2.2 2. %e
或 %E
以科学计数法形式输出浮点数,%e
使用小写 e
,%E
使用大写 E
。
示例代码:
echo "123456789" | awk '{ printf "The scientific notation is %e and %E\n", $1, $1 }'
输出结果:
The scientific notation is 1.234568e+08 and 1.234568E+08
科学计数法能更简洁地表示较大或较小的数值。
1.2.2.3 3. %g
或 %G
依据数值大小自动选择 %f
或 %e
(%G
对应 %E
)格式输出,以更简洁的方式呈现。
示例代码:
echo "0.00000123" | awk '{ printf "The number is %g and %G\n", $1, $1 }'
输出结果:
The number is 1.23e-06 and 1.23E-06
对于较小的数值,%g
和 %G
会选择科学计数法输出。
1.2.3 字符串类型
1.2.3.1 %s
以字符串形式输出。
示例代码:
echo "apple" | awk '{ printf "The fruit is %s\n", $1 }'
输出结果:
The fruit is apple
%s
直接将输入的字符串原样输出。
1.3 修饰符
1.3.1 宽度修饰符
1.3.1.1 1. 整数宽度
指定输出的最小宽度,若输出内容长度小于指定宽度,则在左边补空格(默认情况)。
示例代码:
echo "123" | awk '{ printf "The number with width 5 is %5d\n", $1 }'
输出结果:
The number with width 5 is 123
这里指定宽度为 5,而数字 123 长度为 3,所以在左边补了 2 个空格。
1.3.1.2 2. 左对齐
在宽度修饰符前加上 -
号表示左对齐。
示例代码:
echo "abc" | awk '{ printf "The left - aligned string with width 5 is %-5s\n", $1 }'
输出结果:
The left - aligned string with width 5 is abc
指定宽度为 5,字符串 abc
长度为 3,左对齐后在右边补了 2 个空格。
1.3.2 精度修饰符
1.3.2.1 1. 浮点数精度
对于浮点数类型(%f
、%e
、%E
、%g
、%G
),可以使用 .
后跟一个整数来指定小数位数。
示例代码:
echo "3.1415926" | awk '{ printf "The number with 2 decimal places is %.2f\n", $1 }'
输出结果:
The number with 2 decimal places is 3.14
这里指定保留 2 位小数,printf
会对输入的浮点数进行四舍五入。
1.3.2.2 2. 字符串精度
对于字符串类型(%s
),精度表示输出的最大字符数。
示例代码:
echo "abcdefg" | awk '{ printf "The string with max length 3 is %.3s\n", $1 }'
输出结果:
The string with max length 3 is abc
只输出字符串的前 3 个字符。
1.3.3 正负号修饰符
1.3.3.1 1. +
号
在格式说明符前加上 +
号,会对正数显示 +
号。
示例代码:
echo "10" | awk '{ printf "The signed number is %+d\n", $1 }'
输出结果:
The signed number is +10
1.3.3.2 2. 空格
在格式说明符前加上一个空格,正数前会输出一个空格,负数前正常显示 -
号。
示例代码:
echo "-10 10" | awk '{ printf "The numbers are % d and % d\n", $1, $2 }'
输出结果:
The numbers are -10 and 10
1.3.4 零填充修饰符
在宽度修饰符前加上 0
,当输出内容长度小于指定宽度时,会在左边补 0。
示例代码:
echo "123" | awk '{ printf "The zero - padded number with width 5 is %05d\n", $1 }'
输出结果:
The zero - padded number with width 5 is 00123
1.4 综合示例
下面是一个综合运用各种格式说明符和修饰符的示例:
echo "123 3.14159 abc" | awk '{
printf "Integer: %5d, Left - aligned integer: %-5d\n", $1, $1;
printf "Float with 2 decimals: %.2f, Scientific notation: %e\n", $2, $2;
printf "String with max length 2: %.2s, Zero - padded number: %05d\n", $3, $1;
}'
输出结果:
Integer: 123, Left - aligned integer: 123
Float with 2 decimals: 3.14, Scientific notation: 3.141590e+00
String with max length 2: ab, Zero - padded number: 00123
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.