【问题标题】:find highest value of a particular property in multiple files在多个文件中查找特定属性的最高值
【发布时间】:2017-09-28 14:39:06
【问题描述】:

我的日志目录中有多个模式为“*.tps (example:tps-20170307170421560-1053.tps)”的文件(文件位于不同的子目录中)。

文件中的条目如下所示。我想在所有文件中提取 endtime 的最高值。

“结束时间:1488902691462”

文件中的条目

{"endTime":1488902691462,"startTime":1488902691462,"operationIdentity":"publishCacheStatistics","name":"murex.limits.utilities.cache.statistics.CacheStatisticsTimerTask","context":{"parentContext":{"id":-1,"parentContext":null},"data":[{"value":"GlobalRuleCache:Util_Algos_Ctp_Notional_Bar:ValidationRuleRepository","key":"name"},{"value":"0","key":"hits"},{"value":"0","key":"misses"},{"value":"0","key":"count"},{"value":"0","key":"maxElements"},{"value":"0","key":"evictions"},{"value":"Default","key":"policy"}],"id":0}}
{"endTime":1488902691471,"startTime":1488902691471,"operationIdentity":"publishCacheStatistics","name":"murex.limits.utilities.cache.statistics.CacheStatisticsTimerTask","context":{"parentContext":{"id":-1,"parentContext":null},"data":[{"value":"GlobalRuleCache:Diff_Bar_No_Engine:ValidationRuleRepository","key":"name"},{"value":"0","key":"hits"},{"value":"0","key":"misses"},{"value":"0","key":"count"},{"value":"0","key":"maxElements"},{"value":"0","key":"evictions"},{"value":"Default","key":"policy"}],"id":9}}

【问题讨论】:

  • ...1462 甚至不是样本数据中的最大值。 “最高”是指“最小”吗?

标签: bash search grep pattern-matching


【解决方案1】:

您能否尝试关注并告诉我这是否对您有帮助。我已经用 GNU awk 试过了。

awk -v RS=':|,' '/endTime/{getline;val=val>$0?val:$0} END{print val}' Input_file

解释: 将记录分隔符设为 : OR ,然后技巧是在一行中搜索字符串 endTime,如果找到则使用 getline(将跳转到下一行),现在在这里检查是否val 的值大于它的先前值,如果不是,则保持原样,否则用它的新值替换它。最后打印val的值。

【讨论】:

  • downvoter,你能告诉我 -ve 的原因吗?想请您告诉我。
  • 我测试了您的回复,它在 Ubuntu 上完美运行。聪明的方式。我投了赞成票,不知道为什么有人会反对。
  • @MatiasBarrios,感谢队友的鼓励,继续学习,继续分享。
  • @RavinderSingh13:感谢您的回复。它在 solaris 盒子上不起作用:( bash$ awk -v RS=':|,' '/endTime/{getline;val=val>$0?val:$0} END{print val}' awk: 第 1 行附近的语法错误awk:在 1 号线附近救援
  • @RavinderSingh13 :即使我没有投反对票。有些人也对我的问题投了反对票。至少他们应该提到原因。
【解决方案2】:

由于您的数据看起来像 JSON,请使用 解析它们:

shopt -s globstar
jq -r .endTime **.tps | sort -n | head -1

获得最小值。如果您想要最大的,请使用tail -1

【讨论】:

  • true,但简单文本文件包含 JSON 格式的数据。
  • 好的,谢谢,但是在 bash 脚本中寻找一些东西。之前忘记提了。
【解决方案3】:

这个对我有用。

find . -name '*.tps' -exec sed '/endTime/!d; s/{//; s/,.*//' {} + | sort -r | head -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2019-12-01
    • 2016-06-07
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多