Я использую следующий код PHP:
<?php
exec ("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log | cut -d'|' -f1,3- > i/content/other/LOG_FILE.log");
?>
Он сравнивается с файлами журнала, объединяет содержимое, если идентификаторы журнала совпадают, и выводит его в файл LOG_FILE.log. В результате у меня должно быть что-то похожее в LOG_FILE.log
[14/May/2018:06:37:07 +0300]|HEAD /favicon.ico HTTP/1.0|Host:host.com|Connection:close
Этот код работал хорошо в течение длительного времени, но теперь кажется, что он где-то не работает, потому что LOG_FILE.log пуст.
Добавление упрощенного кода:
<?php
$output=exec("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log");
echo $output;
?>
Этот код ничего не повторяет.
Я прошу прощения за такой беспорядочный вопрос, но я не являюсь автором кода и не знаком с PHP, но все же я должен как-то решить эту проблему.
Я наконец нашел причину проблемы и решил ее. Проблема не связана с командой ‘awk’, извините за это. Проблема была в разрешениях для файлов журнала apache, как только я исправил это, исходный код начал давать ожидаемый результат.
Спасибо всем за ваши предложения.
Других решений пока нет …