Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
捕获json格式日志的两个时间戳之间的所有日志_Json_Shell_Jq - Fatal编程技术网

捕获json格式日志的两个时间戳之间的所有日志

捕获json格式日志的两个时间戳之间的所有日志,json,shell,jq,Json,Shell,Jq,我有一个大的JSON格式日志文件,其中包含字段StartDate,StartTime,每个日志条目以EndDate和EndTime结尾 下面是我的示例输入日志文件条目,共4行。我的日志文件由数据天数的条目组成 { "Utility":"DBUpdate", "StartDate":"2020-09-21", "StartTime":"14:41:12", "Serve

我有一个大的JSON格式日志文件,其中包含字段
StartDate
StartTime
,每个日志条目以
EndDate
EndTime
结尾

下面是我的示例输入日志文件条目,共4行。我的日志文件由数据天数的条目组成

{ "Utility":"DBUpdate", "StartDate":"2020-09-21", "StartTime":"14:41:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-21", "EndTime":"14:41:21", "ExitCode":0 }
{ "Utility":"DBUpdate", "StartDate":"2020-09-22", "StartTime":"14:41:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-22", "EndTime":"14:41:21", "ExitCode":0 }
{ "Utility":"DBUpdate", "StartDate":"2020-09-23", "StartTime":"14:41:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-23", "EndTime":"14:41:29", "ExitCode":0 }
{ "Utility":"DBUpdate", "StartDate":"2020-09-23", "StartTime":"14:42:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-23", "EndTime":"14:43:21", "ExitCode":0 }
在一个单独的脚本中,我运行一个作业,捕获开始日期和时间,并将结束日期和结束时间捕获到一个临时文件中,如下所示

2020-09-23 14:41:12
2020-09-23 14:43:21
我在脚本中使用如下变量来捕获这些时间

DATETIME=$(date '+%Y-%m-%d %T')
DATE=$(echo "${END_DATETIME}" | cut -f1 -d' ')
TIME=$(echo "${END_DATETIME}" | cut -f2 -d' ')
使用具有程序开始和结束日期时间的输入文件数据,我希望捕获开始时间和结束时间之间的所有日志文件行,并将其写入文件

我希望我的新日志文件如下所示:

{ "Utility":"DBUpdate", "StartDate":"2020-09-23", "StartTime":"14:41:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-23", "EndTime":"14:41:29", "ExitCode":0 }
{ "Utility":"DBUpdate", "StartDate":"2020-09-23", "StartTime":"14:42:12", "Server":"eaidev", "Userid":"sx50067", "TrueExit":"No", "WaitInterval":30, "Cluster":"1", "Source":"MANNING1", "Target":"MANNING2", "ClusterListCt":5, "ListCt":55, "RequestServer":"MANNING3", "Reply":"JOT4", "ISC(Source)":0, "EndDate":"2020-09-23", "EndTime":"14:43:21", "ExitCode":0 }
我能够根据日期捕获日志,但到了时间,我得到的比我想要的更多。您能提出建议吗?

注意事项 您的数据有一个明显的缺陷,即使用两个不同的字段(
StartDate
StartTime
)而不是一个字段“datetime”,后者是编程语言和数据类型中的标准和众所周知的字段。如果要比较日期,则必须比较这些字段的组合

此外,如果你必须考虑更多关于这些日期的事情,比如时区或夏令时,这种结构会变得更令人沮丧。 另一个注意事项:这里似乎使用JSON,但您将其视为文本文件,每行一条记录,JSON不一定是这样打印的,或者可能在某些位置有字符,这些字符将打断基于列位置或模式匹配的简单文本解析


使用jq 通常,要过滤json并仅获取字段值在某个范围内的json,请执行以下操作:

jq 'select(.StartDate > "2000-09-22" and .StartDate < "2020-09-24")' file.json
因此,不需要为日期或时间添加不同的条件。输出:

{“实用工具”:“数据库更新”,“开始日期”:“2020-09-21_14:41:12”,“服务器”:“eaidev”,“用户ID”:“sx50067”,“TrueExit”:“否”,“等待间隔”:30,“集群”:“1”,“源”:“人员1”,“目标”:“人员2”,“集群列表”:5,“列表”:55,“请求服务器”:“人员3”,“回复”:“JOT4”,“ISC(源)”:0,“结束日期”:“2020-09-21_14:41:21”,“ExitCode”:0}
{“实用工具”:“DBUpdate”,“StartDate”:“2020-09-22_14:41:12”,“服务器”:“eaidev”,“用户ID”:“sx50067”,“TrueExit”:“否”,“等待间隔”:30,“群集”:“1”,“源”:“人员1”,“目标”:“人员2”,“群集列表”:5,“列表”:55,“请求服务器”:“人员3”,“回复”:“JOT4”,“ISC(源)”:0,“结束日期”:“2020-09-22_14:41:21”,“Exide”:0}
{“实用工具”:“DBUpdate”,“StartDate”:“2020-09-23_14:41:12”,“服务器”:“eaidev”,“用户ID”:“sx50067”,“TrueExit”:“否”,“等待间隔”:30,“群集”:“1”,“源”:“人员1”,“目标”:“人员2”,“群集列表”:5,“列表”:55,“请求服务器”:“人员3”,“回复”:“JOT4”,“ISC(源)”:0,“结束日期”:“2020-09-23_14:41:29”,“Exide”:0}
{“实用工具”:“DBUpdate”,“StartDate”:“2020-09-23_14:42:12”,“服务器”:“eaidev”,“用户ID”:“sx50067”,“TrueExit”:“否”,“等待间隔”:30,“群集”:“1”,“源”:“人员1”,“目标”:“人员2”,“群集列表”:5,“列表”:55,“请求服务器”:“人员3”,“回复”:“JOT4”,“ISC(源)”:0,“结束日期”:“2020-09-23_14:43:21”,“出口”:0}

编辑您的Q,将您的工作内容包括“能够根据日期(和时间)捕获日志”。祝你好运。
你能建议吗?
使用比shell更强大的东西。这也可以解析json。比如python。