如何在Unix服务器上按小时统计文件记录数?
按小时统计文件记录数的最简实现方法
假设你要统计的是文件修改时间所属日期小时段内的总记录数(即把每个文件的行数按其修改时间的日期+小时分组汇总),可以用一条Shell命令组合完成:
find /目标目录 -type f -exec sh -c 'echo "$(stat -c "%y" "$1" | cut -c1-13) $(wc -l < "$1")"' _ {} \; | awk '{key=$1" "$2; sum[key]+=$3} END {print "Date Hour records"; for(k in sum) printf "%s %d\n", k, sum[k]}' | sort
命令说明:
find /目标目录 -type f:遍历指定目录下的所有普通文件,替换/目标目录为你实际的文件存放路径(比如/data/logs)stat -c "%y" "$1" | cut -c1-13:提取文件的修改时间,截取到小时部分,格式为YYYY-MM-DD HHwc -l < "$1":统计单个文件的记录行数(避免输出文件名)awk:将相同日期+小时的记录数累加汇总,最后按要求格式输出表头和统计结果sort:对结果按时间顺序排序,保证输出的日期小时是连续的
如果你的需求是统计文件内容中每条记录的时间戳所属小时的数量(比如日志每行带时间),可以调整为:
cat /目标目录/* | awk '{dt=substr($0,1,13); count[dt]++} END {print "Date Hour records"; for(k in count) printf "%s %d\n", k, count[k]}' | sort
(注意:需要根据你实际的时间戳在每行的位置,调整substr($0,1,13)的截取范围)
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

