Awk入门
完成条件
Awk 输出(Print & Printf)
Awk 提供了 print
和 printf
两种输出方式:
print
:适用于简单的输出printf
:格式化输出(类似 C 语言)
1. print
语句
基本用法
语法 | 说明 |
---|---|
print |
输出当前行(默认 $0 ) |
print 变量 |
输出变量的值 |
print 变量1, 变量2, ... |
多个参数输出(用 OFS 作为分隔符) |
print 变量1 变量2 |
多个参数直接拼接(无分隔符) |
示例 1:输出整行
{ print } # 等价于 print $0
示例 2:输出某个字段
{ print $1 } # 只输出第一列
示例 3:输出多个字段
{ print $1, $2 } # 用默认空格分隔
输入
Alice 25
Bob 30
Charlie 28
输出
Alice 25
Bob 30
Charlie 28
示例 4:改变 OFS
(输出字段分隔符)
BEGIN { OFS=" | " }
{ print $1, $2 }
输出
Alice | 25
Bob | 30
Charlie | 28
2. printf
语句
语法
printf("<格式字符串>", 参数1, 参数2, ...)
- 格式字符串包含普通字符和格式占位符(如
%d
,%s
,%f
)。 printf
不会自动换行,需要手动加\n
。
3. printf
格式化占位符
格式代码 | 说明 | 示例 |
---|---|---|
%d |
整数(十进制) | printf("%d", 35) → 35 |
%o |
整数(八进制) | printf("%o", 35) → 43 |
%x |
整数(十六进制) | printf("%x", 35) → 23 |
%c |
字符(ASCII 码转换) | printf("%c", 65) → A |
%s |
字符串 | printf("%s", "hello") → hello |
%e |
科学计数法 | printf("%e", 3.1415) → 3.141500e+00 |
%f |
浮点数 | printf("%f", 3.1415) → 3.141500 |
%g |
自动选择 %e 或 %f |
printf("%g", 3.1415) → 3.1415 |
4. printf
示例
4.1 格式化整数
BEGIN {
x = 35
printf("x = %d decimal, %x hex, %o octal.\n", x, x, x)
}
输出
x = 35 decimal, 23 hex, 43 octal.
4.2 格式化字符串
BEGIN {
name = "Alice"
printf("Hello, %s!\n", name)
}
输出
Hello, Alice!
4.3 格式化浮点数
BEGIN {
x = 3.14159
printf("x = %f\n", x)
}
输出
x = 3.141590
5. 指定宽度和对齐
格式 | 说明 | 示例 | 输出 |
---|---|---|---|
%5d |
右对齐,宽度 5 | printf("[%5d]", 35) |
[ 35] |
%-5d |
左对齐,宽度 5 | printf("[%-5d]", 35) |
[35 ] |
%08d |
宽度 8,前导 0 | printf("[%08d]", 35) |
[00000035] |
示例
BEGIN {
x = 312
printf("[%5d]\n", x) # [ 312]
printf("[%-5d]\n", x) # [312 ]
printf("[%08d]\n", x) # [00000312]
}
6. 格式化浮点数
格式 | 说明 | 示例 | 输出 |
---|---|---|---|
%5.2f |
总宽度 5,小数点后 2 位 | printf("[%5.2f]", 3.14159) |
[ 3.14] |
%-5.2f |
左对齐,宽度 5,小数 2 位 | printf("[%-5.2f]", 3.14159) |
[3.14 ] |
%08.2f |
宽度 8,前导 0 | printf("[%08.2f]", 3.14159) |
[00003.14] |
示例
BEGIN {
x = 251.67309
printf("[%5.2f]\n", x) # [251.67]
printf("[%10.3f]\n", x) # [ 251.673]
printf("[%-10.3f]\n", x) # [251.673 ]
printf("[%010.3f]\n", x) # [000251.673]
}
7. printf
实战示例
7.1 打印表格
BEGIN {
printf("%-10s %5s %10s\n", "Name", "Age", "Salary")
printf("%-10s %5d %10.2f\n", "Alice", 25, 5000.50)
printf("%-10s %5d %10.2f\n", "Bob", 30, 6500.75)
printf("%-10s %5d %10.2f\n", "Charlie", 28, 7200.00)
}
输出
Name Age Salary
Alice 25 5000.50
Bob 30 6500.75
Charlie 28 7200.00
7.2 对齐列
{
printf("%-10s %10s %10.2f\n", $1, $2, $3)
}
输入
Alice Manager 5000.5
Bob Engineer 6500.75
Charlie HR 7200.00
输出
Alice Manager 5000.50
Bob Engineer 6500.75
Charlie HR 7200.00
总结
语法 | 说明 |
---|---|
print $0 |
输出整行 |
print $1, $2 |
输出多个字段(空格分隔) |
OFS=","; print $1, $2 |
改变字段分隔符 |
printf("%d", x) |
格式化整数 |
printf("%5.2f", x) |
格式化浮点数 |
printf("%-10s", x) |
左对齐字符串 |
练习
- 格式化整数
BEGIN { printf("Total: %08d\n", 123) }
输出
Total: 00000123
- 输出对齐列表
BEGIN {
printf("%-12s %5s %10s\n", "Name", "Age", "Salary")
printf("%-12s %5d %10.2f\n", "Alice", 25, 5000.50)
}
输出
Name Age Salary
Alice 25 5000.50
下一章,我们将学习 Awk 的文件处理(File Processing) 🚀
最后修改: 2025年01月30日 星期四 01:20