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
) 所示。