Я написал команду 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 }
Как я могу решить это?
Если вы хотите передать строку в скрипт оболочки, вам нужно правильно указать ее в кавычках для оболочки. Самый простой способ сделать это — сделать его литералом в одинарных кавычках; это требует преобразования одинарных кавычек внутри строки.
exec('awk \'{sum += $NF} END {print sum/NR}\' /serach_grater500ms_test.txt');
В вашем примере строка php находится между двойными кавычками «. Символ ‘внутри не имеет особого значения, вам не нужно избегать его. С другой стороны, $ (как в sum += $NF
), поэтому php заменяет $NF
с его значением (пусто!).
С ответом Иниана строка php находится между одинарной кавычкой. Так что php не ищет переменную внутри ($NF
защищен); но вы должны бежать дальше внутри.
Вы также можете заставить его работать с двойной кавычкой вашего примера; но вы избегаете только \ $ из $NF
:
$no_of_request=exec("awk '{sum += \$NF} END {print sum/NR}' filee");