2017-02-02 3 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 с его значением (пусто!)

с ответом Inian в строку PHP между одинарной кавычки»так что PHP не ищет переменную внутри ($NF защищена).. но вы должны бежать далее \ 'внутри.

Вы также можете заставить его работать с двойной цитатой вашего примера, но вы избегать только \ $ от $NF:

$no_of_request=exec("awk '{sum += \$NF} END {print sum/NR}' filee"); 
Смежные вопросы