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() 不会打印,但可以用 print 显示 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