每小时从标准.gz日志文件中提取和计数值



我试图每小时统计一组.gz日志文件中特定字符串的出现次数。每个日志文件语句以以下时间格式开始:

2013-11-21;09:07:23.433.

例如,为了更清楚,找出字符串"abc"在上午8点到9点之间,然后在上午9点到10点之间的出现次数,依此类推。有什么想法吗?

由于您只想统计出现次数,您可以简单地zcat文件的内容,grep描述您要查找的内容的部分——单词/时间间隔——最后对条目进行排序/计数(sort | uniq -c)。以下内容可能就足够了:

zcat *.gz | grep <word> | grep -oP "^d{4}-d{2}-d{2};d{2}" | sort | uniq -c

上面的命令将在您的日志文件中找到包含您要查找的<word>的行,从这些条目中提取日期和小时,然后计算出现次数。如果你不想考虑天/月/年,你可以使用:

zcat *.gz | grep <word> | grep -oP "^d{4}-d{2}-d{2};Kd{2}" | sort | uniq -c

grep表达式中添加的K是PCRE-PerlCompatibleRegularExpression中查找落后的标志。

试试这个:

zgrep -c '2013-11-21;0[89]:.*abc' file.gz

或者awk(linux中的gawk)会起作用:

zcat *.gz  | awk -F'[.;:]' '{arr[$2]++} END{for(i in arr){print i, arr[i]} }' 2>/dev/null

重定向之所以存在,是因为一些awk,尤其是gawk,会抱怨。不是元字符

相关内容

  • 没有找到相关文章

最新更新