我想从日志(log)文件中获取给定日期范围内的值计数.我的日志(log)文件是这样的.

values.log 

2022-01-01-10:01 AAA-passed
2022-01-01-11:05 AAA-passed
2022-01-01-12:01 AAA-passed
2022-01-01-13:05 AAA-passed
2022-01-02-12:01 AAA-failed
2022-01-03-13:05 AAA-failed

我try 了以下方法来获取给定时间范围内的值计数.

t1='2022-01-01-10:01'
t2='2022-01-03-13:05'

pass=$(awk '/^'$t1.*'/,/'$t2.*'/' values.log | grep -w "AAA-passed" | wc -l)
echo $pass

只有在日志(log)文件中输入了准确的时间戳时,此方法才有效.但如果我们给出一个未输入日志(log)文件的时间范围,该方法不起作用,也不会给出答案,

例如,如果我们给出

    t1='2022-01-01-10:00'
    t2='2022-01-03-14:00'

这没有给出任何答案,因为t1和t2的这些精确值没有输入到日志(log)文件中.我也try 了很多其他方法,但都不管用.有人能帮我弄清楚这件事吗.提前感谢..!


编辑-

我找到了一个相关的答案,

awk -v 'start=2018-04-12 14:44:00.000' -v end='2018-04-12 14:45:00.000' '
   /^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} / {
     inrange = $0 >= start && $0 <= end
   }
   inrange' < your-file

这种方法对我来说很有效,但我不硬编码t1和t2的值

t1=$(date -d "${dtd} -7 days" +'%Y-%m-%d-%R')
t2=$(date '+%Y-%m-%d-%R')

Result time format - 2022-07-05-12:15
Required time format - 2018-04-12 14:44:00.000 

那么,我如何编辑上述表达式以获得所需时间格式的日期时间呢.

推荐答案

@Fravadona answered the question you asked所以你应该接受他们的答案,但这太长了,无法作为注释添加,需要格式化,所以这里是-仅供参考,除了时间戳比较之外,当你使用awk时,你不需要到grep和wc的管道:

t1='2022-01-01-10:01'
t2='2022-01-03-13:05'

pass=$(
    awk -v beg="$t1" -v end="$t2" '
        (beg <= $1) && ($1 <= end) && /AAA-passed/ { cnt++ }
        END { print cnt+0 }
    ' values.log
)
echo "$pass"

Linux相关问答推荐

如何创建一堆文件中所有单词的列表?

为什么库中不调用全局变量的构造函数?

从 ALSA USB 硬件设备获取 USB 设备文件路径

如何添加Linux格式的时间输出

如何使用正则表达式在 LINux 中查找具有不同结尾的多个文件?

Linux 系统调用文档

提交SLURM作业(job)时出现nohup问题

ld-linux.so.2 和 linux-gate.so.1 是什么?

使用 RPATH 但不使用 RUNPATH?

Vagrant chicken-and-egg:与 uid = apache 用户共享文件夹

使用 Scp 时防止覆盖文件

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

如何准确复制文件夹

自动化 Amazon EBS 快照 任何人在 linux 上都有一个好的脚本或解决方案

如何使用文件描述符刷新写入?

*nix 系统上是否有与 COM 等效的功能?如果不是,那么 *nix 的可重用性方法是什么?

我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗

如何在 linux 或 unix 上找到用户的主目录?

如何安装python开发者包?

`cd //` 中的双斜杠 // 在 Linux 中是什么意思?