如何使用日期和时间之间的bash脚本提取日志

时间:2019-06-05 19:57:12

标签: linux bash unix awk logfile

有3个日志文件,需要通过bash提取一个句点,但是它不能将文件标识为日期/时间。 谁能帮助我使用sed或awk甚至grep的脚本如何从YYYY / MM / DD HH:MM:ss到YYYY / MM / DD HH:MM:ss的日志?

我的日志文件生成如下:


    2019-06-04-06.48.05.040000  INFO v65a8fe79:16a8d792e10:-d37:10.150.100.000 66.200.83.195 |36983 RD8jrq1limntMPACJ4iRx-D
    2019-06-04-07.38.03.145000  INFO 2d5bb9b6:16a8d794bd9:-ae9:10.150.100.000 200.200.87.8 |37027 fje7hxh7yKCGZcEQOnPOafQ 
    2019-06-04-07.38.09.966000  INFO 65a8fe79:16a8d792e10:-d36:10.150.100.000 200.200.87.8 |37029 3hesLFH1cySQ1so0YSmShbV    
    2019-06-04-07.38.09.966000  INFO 2d5bb9b6:16a8d794bd9:-ae8:10.150.100.000 200.200.87.8 |37028 SykkGWSrAXh8yUG

,其他格式如下:

2019-06-05 00:28:50,548 DEBUG [site.aq.application.object.context.DataContextFactoryImpl] - [Criado o DataContext com -389:192.193.10.250]
2019-06-05 00:28:50,550 INFO [site.aq.application.object.context.DataContextFactoryImpl] - [CacheableRegraUserAgentService:  countFail=8, matchRate=0.6]
2019-06-05 00:28:50,554 DEBUG [site.aq.application.object.context.DataContextFactoryImpl] - [Liberado o dataContext com ID 2d5bb9b6:16a8d794bd9:-389:192.193.46.200]
2019-06-05 07:20:04,628 DEBUG [site.aq.application.object.context.DataContextFactoryImpl] - [Criado o DataContext com ID65a8fe79:16a8d792e10:-5e8:192.300.46.200]

我很满意,并通过例行搜索来做到这一点:

我尝试这样写:

创建文件“ lista-log.awk”

#!/usr/bin/gawk -f
BEGIN {
    starttime = mktime(starttime)
    endtime = mktime(endtime)
}

func in_range(n, start, end) {
    return start <= n && n < end
}

match($0, /^([0-9]{4})-([0-9]{2})-([0-9]{2})\s/, m) && 
    in_range(mktime(m[1] " " m[2] " " m[3] " 00 00 00"), starttime, endtime)

在promtp上我写例如:

./lista-log.awk -v starttime='2019 06 05 00 00 00' -v endtime='2019 06 05 04 39 00' arquivo.log.txt

但是我认为这似乎是他不了解这是一个小时/日期,为什么不放弃任何内容

1 个答案:

答案 0 :(得分:3)

您的好处是日期时间是一种可排序的格式。因此,您所需要做的就是编写以下awk行:

awk -v tStart="2019-05-31-01.02.03.000000" -v tEnd="2019-06-01-21.02.03.000000" \
    '($1 >= tStart) && ($1 < tEnd)' file