2017-02-02 5 views
1

ログファイルから読み込み、特定の列の平均を取得する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 } 
を投げます

どうすれば解決できますか?

答えて

1

文字列をシェルスクリプトに渡す場合は、シェルに対して適切に引用符を付ける必要があります。これを行う最も簡単な方法は、一重引用符で囲まれたリテラルにすることです。これは、文字列の中で単一引用符を変換する必要があります。

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

あなたの例では、PHPの文字列は二重引用符」の間である。文字は「内部には特別な意味を持っていない、あなたは、一方(sum += $NFのように)$が解釈される。それをエスケープする必要がいけませんそのPHPは(空!)、その値を$NFを置き換え

PHPの文字列は単一引用符」の間でInianの答えではPHPは($NFが保護されている)の内部変数を探していませんので、。。しかし、あなたは脱出しなければなりませんさらに内側に配置することもできます。

例の二重引用符を使用することもできますが、 $NFの\ $のみをエスケープする:

$no_of_request=exec("awk '{sum += \$NF} END {print sum/NR}' filee"); 
関連する問題