计算与日志文件条目的时间差

计算与日志文件条目的时间差

我在日志发送时间和接收时间中有两个字段以毫秒为单位,我必须找到这两个字段之间的差异,如果大于 2 秒,则使用 shell 脚本或 Linux 命令打印这些日志。

2017-01-27 object1(sendtime-1486743904359 ,recdtime-  1486743904500)
2017-01-27 object2(sendtime-1486743904800 ,recdtime-  1486743908000)

我的日志文件还包含其他行,我需要根据上述发送/接收时间条件过滤掉这些行,并且仅包含包含“sendobject”关键字的日志。其他如发送的请求、收到的请求应被忽略

日志详细信息--

2017-01-27 [Info]Delta Cache sendobject (empId-emp1, joindate-456,dealdate-123,sendtime-1527348020000 ,recdtime-1527348028000, salary-1k,amtpaid-EUR)
2017-01-27 [Info]Delta Cache sendobject (empId-emp2, joindate-456,dealdate-123,sendtime-1527348073000 ,recdtime-1527348074000, salary-1k,amtpaid-AUD)
2017-01-27 [Info]Requestsent| (empId-emp1, joindate-456,dealdate-123,sendtime-1527352812000 ,recdtime-1527352820000, salary-1k,amtpaid-INR)
2017-01-27 [Info]Delta Cache sendobject (empId-emp3, joindate-456,dealdate-123,sendtime-1527349111000 ,recdtime-1527349112000, salary-1k,amtpaid-GBP)
2017-01-27 [Info]Delta Cache sendobject (empId-emp4, joindate-456,dealdate-123,sendtime-1527349370000 ,recdtime-1527349375000, salary-1k,amtpaid-CAD)
2017-01-27 [Info]Requestrecicved| (empId-emp1, joindate-456,dealdate-123,sendtime-1527352812000 ,recdtime-1527352820000, salary-1k,amtpaid-INR)
2017-01-27 [Info]Delta Cache sendobject (empId-emp6, joindate-456,dealdate-123,sendtime-1527352812000 ,recdtime-1527352820000, salary-1k,amtpaid-INR)
2017-01-27 [Info]DBupdated| (empId-emp1, joindate-456,dealdate-123,sendtime-1527352812000 ,recdtime-1527352820000, salary-1k,amtpaid-INR)

答案1

awk你一起可以这样做:

awk -F"[- ,)]" '$(NF-1)-$5 >2000' infile
2017-01-27 object2(sendtime-1486743904800 ,recdtime-  1486743908000)

这里我们定义了一组连字符、空格、逗号和右括号作为字段分隔符。

要回答修改后的问题,请尝试:

awk -F"[- ,]" '/sendobject/ && $18-$15 >2000' infile

答案2

一个变体@αГsнιη 的回答:

awk -F'(sen|rec)dtime-' 'NF==3 && $3 - $2 > 2000'

或者,如果日志除了这些行之外还包含各种行,则您在将输入与以下内容匹配时可能会受到更多限制perl

perl -ne 'print if m{
    ^\d{4}-\d\d-\d\d\s+
    object\d+\(
       sendtime-(\d+)\s*,
       recdtime-\s*(\d+)
    \)$}x && $2 - $1 > 2000'

相关内容