awk命令用于查找文件中列的平均值

时间:2017-02-02 11:49:43

标签: php awk

我编写了一个awk命令来读取日志文件并获取特定列的平均值。 命令是:

awk '{sum += $NF} END {print sum/NR}' /serach_grater500ms_test.txt

终端上的一切正常,但是当我尝试在php脚本中执行此命令时如下:

$no_of_request=exec("awk '{sum += $NF} END {print sum/NR}' /serach_grater500ms_test.txt");
print_r($no_of_request);

它给我一个语法错误

PHP Notice:  Undefined variable: NF in /home/javed/Downloads/read_log.php on line 11
awk: line 1: syntax error at or near }

我该如何解决?

2 个答案:

答案 0 :(得分:1)

如果要将字符串传递给shell脚本,则需要为shell正确引用它。最简单的方法是将其作为单引号文字;这需要转换字符串中的单引号。

exec('awk \'{sum += $NF} END {print sum/NR}\' /serach_grater500ms_test.txt');

答案 1 :(得分:0)

在你的例子中,php字符串在双引号之间“。字符'里面没有特殊含义,你不需要逃避它。另一方面,$(如sum += $NF)被解释,所以php用它的值替换$NF(空!)。

根据Inian的回答,php字符串介于单引号之间。因此php不会在内部查找变量($NF受保护);但你必须进一步逃脱。

你也可以使用你的例子的双引号;但你只逃避$NF的\ $:

$no_of_request=exec("awk '{sum += \$NF} END {print sum/NR}' filee");