Эпоха к нормальной дате AWK

в моем выводе awk (помещенном в php) мне нужно преобразовать время эпохи в обычное, что не так с scriptm help plz. Журнал ошибок Apache: sh: 1: синтаксическая ошибка: неопределенная строка в кавычках

$result = shell_exec("grep -i 'SERVICE ALERT' /home/den/-".$date."-00.log | sed 's/ SERVICE ALERT:/;/g; s/^.//g;s/]//g' | awk -F ';' '/WARNING|CRITICAL/ {print 'date -d@'$1',$2,$3,$4}' | sort | uniq  -c | sort -nr | head -10");

0

Решение

GNU awk имеет несколько встроенных функций времени:

gawk '{print strftime("%F %T", $1), $2, $3, $4}' <<END
1234567890 foo bar baz
END
2009-02-13 18:31:30 foo bar baz

Вам придется как-то избежать этих двойных кавычек в вашей гигантской команде оболочки с двойными кавычками. и так как вы сортируете на основе даты и времени, используйте такой формат, как "%Y%m%d-%H%M%S"


Так как awk может делать то же, что и grep и sed, я бы свел эти команды в awk, чтобы немного уменьшить конвейер. Вы можете решить, улучшит ли это или уменьшит ремонтопригодность.

Я не достаточно знаком с PHP, чтобы знать, может ли он обрабатывать лишние пробелы, показанные здесь:

$result = shell_exec(
"gawk -F ';' '
! /SERVICE ALERT/ {next}
{gsub(/ SERVICE ALERT:/, ";"); sub(/^./, ""); gsub(/\]/,""); $1=$1}
/WARNING|CRITICAL/ {print strftime("%F %T", $1),$2,$3,$4}
' /home/den/-".$date."-00.log | sort | uniq  -c | sort -nr | head -10");
1

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

Других решений пока нет …