• 本页内容

94. Awk 分析器 - pgawk


pgawk 程序用于创建 awk 程序的执行配置文件。使用 pgawk,您可以查看每个 awk 语句(和自定义用户定义函数)执行的次数。

首先,创建一个示例 awk 程序,我们将通过 pgawk 运行该程序以查看分析器输出的样子。

$ cat profiler.awk
BEGIN {
    FS=",";
    print "Report Generated On:" strftime("%a %b %d %H:%M:%S %Z %Y",systime());
}
{
    if ( $5 <= 5 )
        print "Buy More: Order", $2, "immediately!"
    else
        print "Sell More: Give discount on", $2, "immediately!"
}
END {
    print "----"
}

接下来,使用 pgawk 执行示例 awk 程序(而不是仅仅调用 awk)。

$ pgawk -f profiler.awk items.txt
Report Generated On:Mon Jan 31 08:35:59 PST 2011
Sell More: Give discount on HD Camcorder immediately!
Buy More: Order Refrigerator immediately!
Sell More: Give discount on MP3 Player immediately!
Sell More: Give discount on Tennis Racket immediately!
Buy More: Order Laser Printer immediately!
----

默认情况下,pgawk 创建一个名为 「profiler.out」(或 「awkprof.out」)的文件。 您可以使用 --profiler 选项指定您自己的探查器输出文件名,如下所示。

$ pgawk --profile=myprofiler.out -f profiler.awk items.txt

查看默认的 「awkprof.out」 以了解各个 awk 语句的执行计数。

$ cat awkprof.out
# gawk profile, created Mon Jan 31 08:35:59 2011
# BEGIN block(s)
BEGIN {
    FS = ","
    print ("Report Generated On:" strftime("%a %b %d %H:%M:%S %Z %Y", systime()))
}
# Rule(s)
{
    if ($5 <= 5) { #2
        print "Buy More: Order", $2, "immediately!"
    } else {
        print "Sell More: Give discount on", $2, "immediately!"
    }
}
# END block(s)
END {
    print "----"
}

在阅读 「awkprof.out」 时,请记住以下几点:

  • 左侧的列包含一个数字。 这表明特定 awk 命令已执行了多少次。 例如,GEGIN 中的 print 语句只执行一次(废话!)。while 循环执行了 6 次。
  • 对于任何条件检查,一个位于括号后的左侧,另一个位于括号后的右侧。左侧表示该模式被检查的次数。右侧显示成功次数。 在上面的示例中,if 执行了 5 次,但成功了 2 次,如 if 语句旁边的 ( #2 ) 所示。