当前位置: 首页 > 文档资料 > Awk 中文教程 >

输出重定向( Output Redirection)

优质
小牛编辑
135浏览
2023-12-01

到目前为止,我们在标准输出流上显示了数据。 我们还可以将数据重定向到文件。 printprintf语句后出现重定向。 AWK中的重定向就像shell命令中的重定向一样,除了它们是在AWK程序中编写的。 本章通过合适的示例解释重定向。

重定向运算符

重定向运算符的语法是 -

语法 (Syntax)

print DATA > output-file

它将数据写入output-file 。 如果输出文件不存在,则创建一个。 使用此类重定向时,输出文件将在写入第一个输出之前被擦除。 对同一输出文件的后续写入操作不会擦除输出文件,而是附加到输出文件。 例如,以下示例写入Hello, World !!! 到文件。

让我们创建一个包含一些文本数据的文件。

例子 (Example)

[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt

执行此代码时,您将获得以下结果 -

输出 (Output)

Old data

现在让我们使用AWK的重定向运算符将一些内容重定向到它。

例子 (Example)

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

执行此代码时,您将获得以下结果 -

输出 (Output)

Hello, World !!!

附加运算符

append运算符的语法如下 -

语法 (Syntax)

print DATA >> output-file

它将数据附加到output-file 。 如果输出文件不存在,则创建一个。 使用此类重定向时,会在文件末尾附加新内容。 例如,以下示例附加Hello, World !!! 到文件。

让我们创建一个包含一些文本数据的文件。

例子 (Example)

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

执行此代码时,您将获得以下结果 -

输出 (Output)

Old data

现在让我们使用AWK的append运算符向它添加一些内容。

例子 (Example)

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

执行此代码时,您将获得以下结果 -

输出 (Output)

Old data
Hello, World !!!

Pipe

可以通过管道而不是使用文件将输出发送到另一个程序。 此重定向打开管道命令,并通过此管道将项目的值写入另一个进程以执行该命令。 重定向参数命令实际上是AWK表达式。 这是管道的语法 -

语法 (Syntax)

print items | command

让我们使用tr命令将小写字母转换为大写。

例子 (Example)

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

执行此代码时,您将获得以下结果 -

输出 (Output)

HELLO, WORLD !!!

双向沟通

AWK可以使用|&进行与外部进程的通信,这是双向通信。 例如,以下示例使用tr命令将小写字母转换为大写。 我们的command.awk文件包含 -

例子 (Example)

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   cmd |& getline out
   print out;
   close(cmd);
}

执行此代码时,您将获得以下结果 -

输出 (Output)

HELLO, WORLD !!!

脚本看起来神秘吗? 让我们揭开它的神秘面纱。

  • 第一个语句cmd = "tr [az] [AZ]"是我们从AWK建立双向通信的命令。

  • 下一个语句,即print命令提供tr命令的输入。 这里&| 表示双向通信。

  • 第三个语句,即close(cmd, "to") ,在竞争执行后关闭to进程。

  • 下一个语句cmd |& getline out借助getline函数将output存储到out变量中。

  • 下一个print语句打印输出,最后close函数关闭命令。