第3.4节:printf格式化字符串输出详解

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值