• 本页内容

99. 系统函数


您可以使用系统内置函数来执行系统命令。请注意,双向通信和系统命令之间存在差异。

|& 中,您可以将任何 awk 命令的输出作为输入传递给外部命令,并且您可以在 awk 程序中接收外部命令的输出(基本上是双向通信)。

使用系统命令,您可以传递任何字符串作为参数,它将完全按照操作系统命令行中给出的方式执行,并返回输出(这与双向通信不同)。

以下是从 awk 调用 pwddate 命令的一些简单示例:

$ awk 'BEGIN { system("pwd") }'
/home/ramesh

$ awk 'BEGIN { system("date") }'
Sat Mar 5 09:19:47 PST 2011

当您执行一个长 awk 程序时,您可能希望它在程序启动和结束时发送电子邮件。 以下示例显示如何在 BEGINEND 块中使用系统命令在开始和完成时向您发送电子邮件。

$ cat system.awk
BEGIN {
    system("echo 'Started' | mail -s 'Program system.awk started..' [email protected]");
}
{
    split($2,quantity,",");
    total=0;
    for (x in quantity)
        total=total+quantity[x];
    print "Item", $1, ":", total, "quantities sold";
}
END {
    system("echo 'Completed' | mail -s 'Program system.awk completed..' [email protected]");
}

$ awk -f system.awk items-sold.txt
Item 101 : 2 quantities sold
Item 102 : 0 quantities sold
Item 103 : 10 quantities sold
Item 104 : 2 quantities sold
Item 105 : 10 quantities sold