awk

System Function

您可以使用系统内置的函数来执行系统命令。请注意,双向通信和系统命令有一个不同。

在"|&"里,你可以使用awk命令输出作为一个外部命令输入,你也可以女接受一个外部命令的输出在你的awk程序大里(它是双向通讯)。

使用系统命令,你可以传递任何字符串作为一个参数,它将给到系统命令行里精确执行,并且将输出返回(它不同于双向通讯)。

以下是从AWK 调用PWD和date命令的一些简单的例子:

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

$ awk 'BEGIN { system("date") }'
Tue Sep  1 16:31:15 CST 2015

当你执行一个长的awk程序,你可能想它去发送一个邮件当程序开始和程序结束时。下面的例子显示你如何使系统命令在BEGIN和END块里发送你一封邮件,当它开始和完成时。

$ 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]");
}
$ cat items-sold.txt
101 2 10 5 8 10 12
102 0 1 4 3 0 2
103 10 6 11 20 5 13
104 2 3 4 0 6 5
105 10 2 5 7 12 6

执行:

$ 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