所以我有一个日志文件,其中显示了我想每天计数的错误消息
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
答案 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}'