gpt4 book ai didi

linux - 如何在 Unix 中 grep 两个日期范围之间的日志

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:41 25 4
gpt4 key购买 nike

我有一个日志文件 abc.log,其中每一行都是 date +%m%d%y 格式的日期:

061019:12
062219:34
062319:56
062719:78

我想查看此日期范围(日期前 7 天到当前日期)之间的所有日志,即(在本例中为从 062019 到 062719)。结果应该是:

062219:34
062319:56
062719:78

我从我这边尝试了一些事情来实现:

awk '/062019/,/062719' abc.log

这给了我正确的答案,但如果我不想硬编码日期值并尝试实现相同的值,它不会给出正确的值。

awk '/date --date "7 days ago" +%m%d%y/,/date +%m%d%y' abc.log

注意:

  • date --date "7 days ago"+%m%d%y062019(7 天前日期)
  • date +%m%d%y062719(当前日期)

有什么建议可以实现吗?

最佳答案

你的 middle-endian日期格式不利于排序和比较。 Y-m-d 会容易得多。

您在 awk 中使用 , 范围的方法要求每天正好有一个日志条目(并且日志条目按时间顺序排序)。

我会使用 perl,例如像这样的东西:

perl -MPOSIX=strftime -ne '
BEGIN { ($start, $end) = map strftime("%y%m%d", localtime $_), time - 60 * 60 * 24 * 7, time }
print if /^(\d\d)(\d\d)(\d\d):/ && "$3$1$2" ge $start && "$3$1$2" le $end' abc.log
  1. 使用 strftime "%y%m%d" 获取 big-endian 格式的日期范围的结尾(允许进行字典顺序比较)。
  2. 使用正则表达式将每一行中的日/月/年提取到单独的变量中。
  3. 将当前行重新排列的日期字段与范围的末尾进行比较,以确定是否打印该行。

关于linux - 如何在 Unix 中 grep 两个日期范围之间的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56805260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com