Команда 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');
1

Другие решения

В вашем примере строка php находится между двойными кавычками «. Символ ‘внутри не имеет особого значения, вам не нужно избегать его. С другой стороны, $ (как в sum += $NF), поэтому php заменяет $NF с его значением (пусто!).

С ответом Иниана строка php находится между одинарной кавычкой. Так что php не ищет переменную внутри ($NF защищен); но вы должны бежать дальше внутри.

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector