我有一个(希望如此)有趣的问题,我可以使用一些建议。我有一个主要用于存储日志的系统。它的目录结构类似于:
YYYY/MM/DD/hostname/
Run Code Online (Sandbox Code Playgroud)
有许多主机名,每个主机名下都有一堆压缩的每小时日志(访问、错误等)。
我感兴趣的是访问日志中按日期和主机名细分的给定字符串的总数。做到这一点的最佳方法是什么?这是否可以通过 find 和 grep 组合实现,或者是否太复杂而需要脚本?
for d in */*/*/*; do
printf '%s: ' "$d"
zcat -- "$d/"*.gz | grep -Fc STRING
done
Run Code Online (Sandbox Code Playgroud)
将计算包含 STRING 的行数。
替换grep -Fc STRING为grep -Fo STRING | wc -l(假设为 GNU grep)以获得出现次数。
如果您不支持文件,请替换zcat为。gzip -dczcat.gz
使用zsh和 GNU grep,您可以将其缩短为:
for d (*/*/*/*) zcat $d/*.gz | grep -FcH --label=$d STRING
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |