每天计算多个文件中的错误消息

时间:2018-10-08 20:12:17

标签: bash shell grep

所以我有一个日志文件,其中显示了我想每天计数的错误消息

cat user.log | grep 'err|error' | wc -l

无论我有什么需要,所有其他我都需要的

zcat user.log.* | grep 'err|error' | wc -l

也差不多

所以这是即时通讯卡住的地方,我需要检查每个log.zip文件,检查是否有多个文件以及今天收集错误的当前文件user.log上有今天日期的错误消息

所以我需要检查50多个user.log.Z文件,以计算具有今天日期的所有行 10月8日00:00:00至23:59:59 和我的user.log

提前抓

编辑-------------

一起求解
 DATE=`date "+%b %e"` ;find /var/adm/ ! -path /var/adm/ -prune -name "user.log*" -prune  -mtime -1 -exec zgrep "$DATE" {} \; |grep "user:err|error" |wc -l

1 个答案:

答案 0 :(得分:0)

如果日期是文件名的一部分,请附加日期(无论是logrotate添加的日期):

zcat -f user.log.* user.log-$(date +%Y-%m-%d).* | grep 'err|error' | wc -l
zcat -f user.log user.log.$(date +%Y-%m-%d).* | grep 'err|error' | wc -l

grep也可以计数,zgrep也可以处理压缩文件,因此要短一些:

zgrep -c 'err|error' user.log user.log.$(date +%Y-%m-%d)*

如果日期不是文件名的一部分,则需要处理所有文件并过滤出具有不同日期的所有行:

zgrep $(date +%Y-%m-%d) file ... | grep -c 'err|error'
zgrep $(date "+%b  %d") file ... | grep -c 'err|error'

或使用awk:

# Assumes the date is in the first field, like "2018-10-09 ... err|error ..."
zcat ... | awk 'BEGIN{d=strftime("%Y-%m-%d")}/err\|error/&&$01==d{c++}END{print c}'