Powershell脚本,用于解析日志文件,然后附加到文件

时间:2018-03-14 11:38:57

标签: linux shell

我是Shellscripting的新手。我正在开发一个poc,其中一个脚本应该读取一个日志文件,然后附加到一个现有文件以用于alert.It应该按照下面的方式工作

将有一些预定义的格式,根据该格式决定是否附加到文件中。例如:

WWXXX9999XS message

**XXX**   - is a 3 letter acronym (application code) like for **tom** for tomcat application
9999      - is a 4 numeric digit in the range 1001-1999
**E or X** - For notification X ,If open/active alerts already existing for same error code and same message,new alerts will not be raised for existing one.Once you have closed existing alerts,it will raise alarm for new error.There is any change in message for same error code from existing one, it will raise a alarm even though open/active alerts present.
X option is only for drop duplicates on code and message otherwise all alert mechanisms are same.

 **S**    - is the severity level, I.e 2,3
 **message**    - is any text that will be displayed 

该脚本将检查日志文件,并查找云服务器已关闭的错误,然后它将附加 wwclo1002X2 云服务器已关闭'如果它是新警报。 2.如果再次出现相同的警报,那么它应该附加 wwclo1002E2 云服务器已关闭

1 个答案:

答案 0 :(得分:0)

您可以使用一些非常方便的命令来执行此类操作。我已根据您的评论对此进行了更新,以允许检查错误是否已附加到新文件的功能。

我的建议是,这里有足够的功能可以保证在bash脚本中保存它。

我的方法是使用less,grep和>的组合。读取并解析文件,然后附加到新文件。首先将以下内容保存到bash脚本(例如名为script.sh的文件)

#!/bin/bash

result=$(less $1 | grep $2)
exists=$(less $3 | grep $2)

if [[ "$exists" == "$result" ]]; then
    echo "error, already present in file"
    exit 1
else
    echo $result >> $3
    exit 0
fi

然后在传递日志文件的命令中使用此文件作为第一个参数,要搜索的字符串作为第二个参数,目标结果文件作为第三个参数,如下所示:

./script.sh <logFileName> "errorToSearchFor" <resultsTargetFileName>

不要忘记运行更改权限所需的文件 - 您可以使用以下方法执行此操作:

chmod u+x script.sh

只是为了澄清,正如你所提到的,你是脚本的新手 - less命令将输出整个文件,|命令(未命名的管道)将此输出传递给grep命令,然后grep命令将在文件中搜索带引号的表达式,并返回包含该表达式的文件中的所有行。然后使用&gt;&gt;将grep命令的输出附加到新文件。

您可能需要在grep之后使用引号定制表达式,以便从日志文件中获得所需的输出。

文件名只是占位符,请务必使用正确的文件名更新这些文件名。希望这有帮助!

注意已更新&gt;到&gt;&gt; (单角括号覆盖,双角括号附加