如何使用AWK获取特定时间段之间的值

如何使用AWK获取特定时间段之间的值,awk,Awk,如何获得特定时间间隔的AWK结果 我正在尝试获取价值超过950的记录数,我可以使用-> awk -F'[|=]' '$4>960' file 但是,我想得到logDurationMillis大于950的这个值,以及特定时间段之间的值,比如晚上8点到晚上10点和上午12点到晚上8点+晚上10点到上午12点 AWK/GAWK是否具有这样做的功能 logAlias=Overall|logDurationMillis=34|logTimeStart=2019-09-12_05:22:02.602

如何获得特定时间间隔的AWK结果 我正在尝试获取价值超过950的记录数,我可以使用->

awk -F'[|=]' '$4>960' file
但是,我想得到logDurationMillis大于950的这个值,以及特定时间段之间的值,比如晚上8点到晚上10点和上午12点到晚上8点+晚上10点到上午12点

AWK/GAWK是否具有这样做的功能

logAlias=Overall|logDurationMillis=34|logTimeStart=2019-09-12_05:22:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=975|logTimeStart=2019-09-12_21:22:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=1267|logTimeStart=2019-09-12_21:47:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=1654|logTimeStart=2019-09-12_16:22:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=3874|logTimeStart=2019-09-12_17:22:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=34|logTimeStart=2019-09-12_21:44:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8
logAlias=Overall|logDurationMillis=34|logTimeStart=2019-09-12_14:22:02.602|logTimeStop=2019-09-12_05:22:02.636|logTraceUID=43adbcaf55de|getMethod1=26|getMethod2=0|getMethod3=0|getMethod4=1|getMethod5=8

我想获得
logDurationMillis
大于950且
logTimeStart
在特定时间段(如晚上8点到晚上10点和上午12点到晚上8点+晚上10点到上午12点)之间的记录。我的建议是采用以下通用方式:

  • 字段由一个
    |
  • 每个字段都是一个键值对,写为
    key=value
  • 提取所有键值对并将它们存储在数组中
    a[key]=value
  • 用您喜欢的任意组合提取信息
$awk'开始{FS=“[|]”
{删除a}

{for(i=1;i 960)&&((“20:00:00.000”)请编辑您的Q以描述
logAlias=…
行的用途。这是示例数据吗?如果是,请显示该数据所需的输出。如果不是,则您的Q确实需要包含一小组要测试的示例数据以及该数据所需的输出。祝您好运。使用
{
tool从“编辑”菜单中选择鼠标文本,以获得代码/数据/ErrMsgs的正确格式。祝你好运。谢谢。logAlias除了提到它是日志中的第一个字段外,没有任何意义。是的,它是一个示例数据,需要输出:我想获得给定时间范围内的所有字段,这些字段是ned以上时间段1:12 AM至8 PM+10 PM至12 AM时间段2:8 PM至10PM@user3512605,由于您的要求不明确,请在您的帖子中添加更多的示例输入行和预期的示例输出行,并将它们包装在代码标记中,并告知我们。@user3512605,请在您的帖子中也发布预期的输出行。
$ awk 'BEGIN{FS="[|]"}
       { delete a }
       { for(i=1;i<=NF;++i) { split($i,b,"="); key=b[1]; value=b[2]; a[key]=value} }
       { time=a["logTimeStart"];sub(/.*_/,"",time) }
       (a["logDurationMillis"] > 960) && ("20:00:00.000" <= time && time < "22:00:00.000")' file