Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大于一次的Awk json日志文件_Json_Linux_Search_Awk_Command - Fatal编程技术网

大于一次的Awk json日志文件

大于一次的Awk json日志文件,json,linux,search,awk,command,Json,Linux,Search,Awk,Command,我有一个日志文件,每一行都是一个很长的json字典。没有一个日志具有相同的长度,但所有日志都有一个“u time”键,该键是以毫秒为单位的历元时间。我想在此日志文件中搜索以提取大于1450616426(秒)的日志。一些日志示例包括: {'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...} {'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_

我有一个日志文件,每一行都是一个很长的json字典。没有一个日志具有相同的长度,但所有日志都有一个“u time”键,该键是以毫秒为单位的历元时间。我想在此日志文件中搜索以提取大于1450616426()的日志。一些日志示例包括:

{'id':Bob, 'last-login':'...', '_time_':1444211444123456, ...}
{'name':'ehsan', 'family':'toghian', 'last-login':'2015-4-12', '_time_': 1444215425123465, .....}
如何编写awk命令?提前谢谢

目瞪口呆

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


说“它坏了”就像把你的车带到机械师那里,只告诉他们“它坏了”。如果没有一些场景和症状(您执行了什么命令行、输入了什么、wrt错误消息发生了什么、输出等等),我们绝对无法帮助您调试问题。只要你能很好地处理一个“不起作用”的脚本,那也没关系,但是如果你需要帮助,你需要给我们一些你需要帮助的线索。@a-Ray-在任何语言的任何代码中都不要使用名为
l
的变量,因为它看起来太像数字
1
,在某些字体中完全无法区分。有一次,我花了几个小时试图帮助某人调试一个语法错误,直到我让她在我面前重新键入代码,并注意到她键入了一个
l
(el)而不是
1
(一个),我们才发现这个语法错误当我问她为什么告诉我这是因为她参加了打字课程,而且老师教过她,键入
l
比键入
1
要快,所以她应该总是这样做,因为它们看起来都一样。当提供你想根据某些标准搜索的样本输入时,最好包括一些符合条件的行和一些不符合条件的行,否则只执行
{print}
的脚本将生成预期的输出。这是一个非常常见的问题,在这个网站上,有人张贴一个问题,并接受第一个答案,产生预期的输出,从该输入,即使被告知它将失败,为其他输入或在其他方面是一个可怕的解决方案。谈到输出,您的输出是缺失的-始终提供与您提供的输入相匹配的预期输出。
$ 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, .....}
$ 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, .....}