我有一个日志文件,每一行都是一个长 json 字典。所有日志的长度都不相同,但它们都有一个'_time_' 键,它是一个以毫秒 为单位的纪元时间。我想在此日志文件中搜索以提取大于 1450616426(second)等时间的日志。一些日志示例是:
{'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...}
{'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_': 1444215425123465, .....}
如何编写 awk 命令?先谢谢了。
最佳答案
$ 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, .....}
关于json - awk json 日志文件大于一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34381305/