Awk入门
Completion requirements
sprintf()
函数
虽然 sprintf()
是 字符串函数,但它的语法与 printf()
几乎相同,因此通常单独讨论。
1. sprintf()
vs printf()
printf()
直接格式化并输出到 标准输出(终端/屏幕)。sprintf()
不会输出,而是将格式化的字符串存入变量。
语法:
var = sprintf("<格式字符串>", 参数1, 参数2, ...)
2. 示例:使用 sprintf()
示例 1:格式化数值并存入变量
BEGIN {
var = sprintf("[%8.3f]", 3.141592654)
print var
}
输出
[ 3.142]
说明:
%8.3f
:宽度 8,总共 3 位小数。sprintf()
不会打印,但可以用var
。
3. sprintf()
用法示例
示例 2:拼接格式化字符串
BEGIN {
name = "Alice"
age = 25
salary = 5000.75
message = sprintf("Name: %s, Age: %d, Salary: $%.2f", name, age, salary)
print message
}
输出
Name: Alice, Age: 25, Salary: $5000.75
sprintf()
允许将格式化字符串存入变量,方便后续操作。
示例 3:用于数组存储格式化字符串
BEGIN {
employees[1] = sprintf("%-10s %5d %10.2f", "Alice", 25, 5000.75)
employees[2] = sprintf("%-10s %5d %10.2f", "Bob", 30, 6000.00)
employees[3] = sprintf("%-10s %5d %10.2f", "Charlie", 28, 7200.50)
for (i in employees)
print employees[i]
}
输出
Alice 25 5000.75
Bob 30 6000.00
Charlie 28 7200.50
%-10s
:左对齐的字符串(宽度 10)%5d
:右对齐整数(宽度 5)%10.2f
:右对齐浮点数(宽度 10,保留 2 位小数)
4. sprintf()
典型应用
应用场景 | 示例 |
---|---|
拼接格式化字符串 | message = sprintf("Age: %d",
25) |
存入数组 | arr[1] = sprintf("%s - %d", "Alice",
25) |
组合字符串返回值 | return sprintf("Price: $%.2f",
price) |
格式化日志输出 | log_entry = sprintf("[%s] ERROR: %s",
timestamp, error_msg) |
5. sprintf()
vs printf()
总结
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
printf() |
格式化并直接输出 | printf("%d", 25) |
25 |
sprintf() |
格式化并存入变量 | var = sprintf("%d", 25); print
var |
25 |
6. 练习
练习 1:格式化存储
BEGIN {
var = sprintf("[%06d]", 123)
print var
}
输出
[000123]
练习 2:存储表格数据
BEGIN {
employees[1] = sprintf("%-10s %5d %10.2f", "Alice", 25, 5000.50)
employees[2] = sprintf("%-10s %5d %10.2f", "Bob", 30, 6000.75)
for (i in employees)
print employees[i]
}
输出
Alice 25 5000.50
Bob 30 6000.75
下一章,我们将学习 Awk 的文件处理(File Processing) 🚀
Last modified: Thursday, 30 January 2025, 1:23 AM