大约到正常日期AWK

时间:2014-10-08 10:44:02

标签: php shell awk

在我的awk输出中(放在php中)我需要将纪元时间转换为正常,脚本帮助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");

1 个答案:

答案 0 :(得分:1)

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

你必须在巨大的双引用shell命令中以某种方式逃避那些双引号。由于您根据日期时间进行排序,因此请使用"%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"
);