Awk 输出重定向(Output Redirection)

在 Awk 中,可以使用 >(重写)>>(追加) 将输出 重定向到文件。此外,还可以使用 管道(| 传输数据到外部命令。


1. >(输出重定向)

语法

print 内容 > "文件名"
  • 如果文件不存在,会创建一个新文件。
  • 如果文件已存在,会覆盖其内容。

示例:写入文件

BEGIN {
    print 3 > "output.txt"
}

output.txt 内容

3

⚠️ 注意:如果 output.txt 已存在,其内容会被清空并覆盖


2. >>(追加重定向)

语法

print 内容 >> "文件名"
  • 如果文件不存在,会创建一个新文件。
  • 如果文件已存在不会覆盖,而是追加到文件末尾。

示例:追加写入文件

BEGIN {
    print "Hello, world!" >> "output.txt"
    print "Appending line 2" >> "output.txt"
}

output.txt 内容

3
Hello, world!
Appending line 2

3. printf 结合输出重定向

语法

printf("<格式>", 参数) > "文件名"
printf("<格式>", 参数) >> "文件名"

示例:使用 printf 格式化输出

BEGIN {
    for (x=1; x<=5; ++x) {
        printf("Number: %03d\n", x) >> "numbers.txt"
    }
}

numbers.txt 内容

Number: 001
Number: 002
Number: 003
Number: 004
Number: 005

4. 管道 |(输出到外部命令)

语法

print "内容" | "外部命令"
  • print 的输出传递给 Shell 命令处理

示例:转换为大写

BEGIN {
    print "hello awk!" | "tr a-z A-Z"
}

输出

HELLO AWK!

5. 关闭文件 close()

语法

close("文件名")
  • 减少打开的文件数量(Linux 通常最大 1024 个)。
  • ⚠️ 关闭文件后不能再使用 > 写入,否则文件内容会被清空!

示例:错误写入

{
    print "Line 1" > "example.txt"
    print "Line 2" > "example.txt"
    close("example.txt")

    print "Line 3" > "example.txt"  # 重新打开,会覆盖之前的内容!
}

example.txt 最终内容

Line 3

⚠️ 解决方案如果要继续写入,使用 >> 追加,而不是 >


6. 练习

练习 1:创建并追加写入

BEGIN {
    print "First line" > "test.txt"
    print "Second line" >> "test.txt"
}

test.txt 内容

First line
Second line

练习 2:输出到 Shell 命令

BEGIN {
    print "hello awk" | "tr a-z A-Z"
}

输出

HELLO AWK

下一章,我们将学习 Awk 的输入处理(File Processing) 🚀

最后修改: 2025年01月30日 星期四 01:25