【问题标题】:errors from script to extract data from log脚本中的错误以从日志中提取数据
【发布时间】:2018-12-19 20:29:56
【问题描述】:

我在运行新的 shell 脚本时不断收到以下错误。我正在尝试从日志文件中提取错误以在它们引起问题之前捕获它们。

: 未找到 [没有这样的文件或目录] : 未找到 [没有这样的文件或目录] LogErrors.sh:第 5 行:第 14 行的语法错误:if' unmatched : not found [No such file or directory] : not found [No such file or directory] LogErrors.sh: line 5: syntax error at line 14:if' 不匹配 : 未找到 [没有这样的文件或目录] : 未找到 [没有这样的文件或目录] LogErrors.sh:第 5 行:第 14 行的语法错误:`while' 不匹配

Code:


#!/bin/ksh

TOM1=/ap/mvr/servers/tomcat1/logs/
TOM2=/ap/mvr/servers/tomcat2/logs/

find $TOM1 $TOM2 -type f -name "mvr-gateway.log" | while read file
do
LOGERRORS=$(grep -B2 -A3 'WARN|ERROR|CRIT' $file)
if[[! -z $LOGERRORS]]
then
    echo "Errors in $file: $LOGERRORS" >> LogErrors.txt
fi
done

【问题讨论】:

  • 您的格式……不太好。 “代码:”之后的所有内容都被视为代码吗?如果是这样,如果您在 SO 上编辑它时添加四个空格作为前缀,它将显示为 code

标签: shell logging extract


【解决方案1】:

看起来您的语法不太适合 ksh,而您正在使用 egrep 语法来表示 grep。

我相信这会产生你所需要的:

#!/bin/ksh
TOM1=/ap/mvr/servers/tomcat1/logs/
TOM2=/ap/mvr/servers/tomcat2/logs/

find $TOM1 $TOM2 -type f -name "mvr-gateway.log" |
while read file
do
    LOGERRORS=$(egrep -B2 -A3 'WARN|ERROR|CRIT' $file)
    if [[ ! -z $LOGERRORS ]]
    then
        echo "Errors in $file: $LOGERRORS" >> LogErrors.txt
    fi
done

与此同时,您可能希望从egrep 的输出中读取每一行以及另一个while read linein(输出来自egrep)。

【讨论】:

  • 我是 shell 脚本的新手。添加您的建议后会怎样?
  • 没问题。请记住,空间很重要。 [[ 和 ]] 前后必须有空格,= 前后不能有空格。
  • 现在就像一个魅力。谢谢!
猜你喜欢
  • 2013-10-08
  • 2018-06-29
  • 2022-11-30
  • 1970-01-01
  • 2013-01-11
  • 2015-05-03
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多