时间/日期 grep 15 分钟

时间/日期 grep 15 分钟

我需要grep在特定时间记录特定类型的行,你有什么想法吗?

这是我的工作脚本:

cat *.log |grep -E '2011-06-30 (1[0-1]:[0-1][0-5]|10:16)'| grep -ach '0110 478655 ..  51' * | awk '{SUM += $1} END { print SUM }'

以上线路工作时间为00:00-00:16。我需要总结grep该特定时间的所有结果。我如何grep字符串:

00:15-00:31, 00:30-00:46, 00:45-01:01 

请注意,时间也应该是可变的,这意味着它不会总是 00:00-01:01 - 有什么办法可以做到这一点吗?

答案1

您可以使用正则表达式来匹配时间,但这并不是完成这项工作的最佳工具。将所有逻辑放入 awk 中并执行数值比较。

Awk 没有用于操作日期的特定工具。 GNU awk 提供mktimeandstrftime作为扩展。对于指定的问题,您不需要这些扩展,但如果您的需求变得更加复杂,它们可能会派上用场。

您给出的“工作”脚本可能不是您想要编写的:您的第二个grep调用将文件名作为参数(*),因此它不会从标准输入中读取。而且您也不显示示例输入。所以不知道你的要求是什么。

下面是一些示例代码,假设所有日志行均以日期开头,并且您希望对所有日志文件中匹配行末尾出现的数字求和。在year,month和变量中传递日期,在和day中传递开始时间;该代码段会查找 15 分钟范围内的日志条目,该范围不允许跨越到不同的日期。hourminute

awk -vyear=2011 -vmonth=6 -vday=30 -vhour=0 -vminute=15 -vRS='[-: ]+' '
BEGIN {start = hour * 60 + min; stop = start + 15}
{time = $4 * 60 + $5}
$1==day && $2== month && $3==day && start <= time && time <= stop && $NF ~ /^[0-9]+$/ {
    sum += $NF
}
END {print sum}'

相关内容