使用PHP处理文本小技巧

PHP的Cli模式使用:http://www.php.net/manual/zh/features.commandline.php

PHP命令行部分参数:

-B 在处理 stdin 之前先执行 PHP 代码。

-R 对每个输入行都执行 PHP 代码。

此模式下有两个特殊变量:$argn 和 $argi。$argn 包含 PHP 当前处理的行内容,而 $argi 则包含该行号。

-E 在处理完输入后执行的 PHP 代码。

Demo:从nginx日志计算平均响应时间

1:nginx日志格式(最后一个字段是响应时间)

"157.55.39.153" - - [01/Jun/2014:23:58:07 +0800] "GET /s-b5a5c8fdcfe0b5bcb9eccabdb0b2d7b0d6c7c4dcb5e7b1ed.html HTTP/1.1" 200 17988 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "0.352"

2:命令

cat sousuo.log-20140531 | /usr/local/php/bin/php -B '$totaltime =0; $lines = 0;' -R '$temp = explode(" ", $argn); $time_c = substr($temp[count($temp) -1],1,-1); $totaltime += $time_c; $line++; echo $line."\r\n";' -E ' echo "\r\n avg time:". ($totaltime / $line);'