AWK输出重定向 - Awk教程

到目前为止,我们已经显示数据在标准输出流。但是,也可以重定向数据到文件。print 或 printf 语句重定向显示。重定向在AWK写就像在重定向shell命令,但它们是写在AWK程序中。下面的这个教程是解释重定向例子。

重定向操作

下面给出的是重定向操作的语法。

print DATA > output-file

此重定向将数据写入输出文件。如果输出文件不存在,那么它被创建。当使用这种类型的重定向时,之前的第一个输出被写入到它的输出文件将被删除。随后写入同一个输出文件不删除输出文件,只会追加到文件。比如下面的例子中写道:Hello, World !!! 消息到该文件。

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

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

在执行上面的代码后,会得到以下结果:

Old data

现在让我们重定向某些内容到文件,使用AWK的重定向操作。

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

在执行上面的代码后,会得到以下结果:

Hello, World !!!

追加操作

下面给出的是追加操作的语法:

print DATA >> output-file

这种重定向追加数据到输出文件output-file。如果输出文件不存在,那么它被创建。当使用这种类型的重定向时,新的内容被附加在文件的结尾。比如下面追加的例子 >Hello, World !!!

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

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

在执行上面的代码后,会得到以下结果:

Old data

现在让我们用AWK的追加操作,加追加一些内容吧。

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

在执行上面的代码后,会得到以下结果:

Old data
Hello, World !!!

管道

通过管道来发送代替使用文件输出到另一个程序。这种重定向打开一个管道命令,并通过这个管道写入项的值,以另一种方法来执行命令。重定向参数命令实际上是一个AWK表达式。下面给出是管道的语法。

print items | command

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

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

在执行上面的代码后,会得到以下结果:

HELLO, WORLD !!!

双向通信

AWK可以通信使用一个外部进程|&,这是双向通信。比如下面的例子中使用tr命令,以小写字母转换为大写。我们 command.awk 文件看起来是这样的:

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

在执行上面的代码后,会得到以下结果:

HELLO, WORLD !!!

有点晕了没有?让我们一步步来分析上面的代码:

第一条语句, cmd = "tr [a-z] [A-Z]" - 是打算从AWK建立双向通信的命令。

下面的语句即打印命令,提供输入到tr命令。此处&| 指示双向通信。

第三条语句即 close(cmd, "to") - 关闭完成其执行后处理。

下一条语句 cmd |& getline out 存储在输出入出变量具有getline函数功能。

接下来print语句打印输出,并最终执行close函数关闭命令。