如何显示搜索行以及搜索字符串出现的次数?

如何显示搜索行以及搜索字符串出现的次数?

我正在编写一个脚本,该脚本将根据特定字符串在控制台上显示所有结果及其计数。

示例:假设我搜索一个名为“ERROR”的字符串,我得到以下结果,这里 ERROR 出现的次数是 5。

2013-12-08 13:43:07 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-01-08 13:43:06 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-02-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)
2014-03-08 13:43:03 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-04-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)

我想显示日志和出现次数(行)。我写了下面的脚本来显示日志:

(zgrep -E "ERROR|Exception" $SS_HOME/logs/*.gz $PROBE_HOME/logs/*.gz $RELAY_HOME/logs/*.gz ;find . -type f -name "*.log" -exec cat {} +) | grep -F ERROR | sort

我不知道如何添加行数。如需任何其他信息,请告知我。

答案1

要显示匹配的行,请对它们进行计数,并使用以下命令显示计数awk

awk '/ERROR/{err++; print} END{print "errors:", err}'

总结错误和异常:

awk '/ERROR/||/Exception/{faults++; print} END{print "faults:", faults}'

分别计算错误和异常:

awk '/ERROR/{err++; print} /Exception/{exc++; print}
     END{print "errors:", err, "exceptions:", exc}'

注意:awk 程序充当过滤器,它们从标准输入读取并写入标准输出,但您也可以提供数据文件作为参数。因此,要使用的是(如下面的评论中所要求的)与一个或多个日志文件 use awk '...' *.log,或者如果您希望在使用 use 解析它们之前解压缩一个或多个 gz 文件awk,例如zcat *.gz | awk '...'(您将上述任何awk程序替换为awk '...')。

答案2

只需使用wc带有选项的命令-l

wc -l

如果您也想打印日志,那么您可以使用tee

cat logs.txt | grep -i error | tee >(wc -l)

相关内容