awk

Two Way Communication

awk可以消息到一个外部处理使用"|&",它是双向通讯的。

下面简单的sed例子用"Sed and Awk"替换单词"Awk"。

$ echo "Awk is great" | sed 's/Awk/Sed and Awk/'
Sed and Awk is great

从awk工作理解如何双向通讯,下面awk脚本模拟上述简单例子使用"|&"

$ cat two-way.awk
BEGIN {
    command = "sed 's/Awk/Sed and Awk/'"
    print "Awk is Great!" |& command
    close(command,"to");
    command |& getline tmp
    print tmp;
    close(command);
}

$ awk -f two-way.awk
Sed and Awk is Great!

在上面例子里:

1. command = "sed 's/Awk/Sed and Awk/'"-- 这是我们打算从AWK建立双向通信的命令。这是一个简单sed人替换命令,用"Sed and Awk"替换"Awk"

2. print "Awk is Great!" |& command -- 输入命令。比如,输入到sed替换命令的内容是"Awk is Great!"。"|&"表示它是一个双向通讯。输入到右侧的命令内容来自"|&"左侧。

3. close(command,"to") - 一旦处理被执行,你应该关闭"to"处理。

4. command |& getline tmp - 现在处理完成,是时候使用getline函数获得处理输出了。先前执行的命令的输出现在将存储在变量“ TMP ” 里。

5. print tmp-这是打印输出。

6. close(command) - 最终,关闭命令。

双向通讯非常灵便,当你在很大程度上依赖外部程序的输出时。