awk json日志文件哪个时间更大

时间:2015-12-20 13:08:53

标签: json linux search awk command

我有一个日志文件,每行都是一个长json字典。没有任何日志具有相同的长度,但它们都具有' _time _' 键,这是毫秒的纪元时间。我想在此日志文件中搜索以提取大于1450616426()的时间的日志。一些日志示例是:

{'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...}
{'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_': 1444215425123465, .....}

如何编写awk命令?提前致谢。

2 个答案:

答案 0 :(得分:1)

$ cat tst.awk
{
    milli = $0
    sub(/.*_time_[^[:digit:]]+/,"",milli)
    sub(/[^[:digit:]].*/,"",milli)
    secs = milli / 1000
}
secs > tgt

$ awk -v tgt=1450616426 -f tst.awk file
{'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...}
{'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_': 1444215425123465, .....}

或使用GNU awk for gensub():

$ awk -v tgt=1450616426 '(gensub(/.*_time_[^[:digit:]]+([[:digit:]]+).*/,"\\1",1) / 1000) > tgt' file
{'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...}
{'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_': 1444215425123465, .....}

答案 1 :(得分:0)

gawk的

 awk -vl=1450616426 '{match($0,"_time_.: *([0-9]{10})[0-9]+",a);if(a[1]>l)print}' file