如何从文件中提取 elapsedTime 属性值

如何从文件中提取 elapsedTime 属性值

我希望从文件中提取 elapsedTime 属性值。

记录一下

{"realm":"/test","transactionId":"9e26c614","elapsedTime":17,"elapsedTimeUnits":"MILLISECONDS","_id":"9e26c6asdasd"}

我拥有的文件以 GB 为单位,我想获取大于 10000 的值。

我尝试 grep 但由于冒号 grep 不起作用。

grep -wo --color 'elapsedTime' fileName -> this just prints attribute names
grep -w  --color "elapsedTime" fileName -> this just highlights the attribute. 

答案1

数据是 JSON 格式,因此最好使用理解此格式的解析器。

elapsedTime这将从文件中的 JSON 中挑选出值/tmp/data

jq .elapsedTime /tmp/data
17

这只会挑选出那些大于 10000 的值

jq '.elapsedTime | select(. > 10000)' /tmp/data

如果确实无法使用,可以考虑构建jqsed|awk然而,这要求每行只能有一个elapsedTime标签和关联值。可能还有其他警告,我真的不推荐它,但如果你在这里感到绝望,那就是,

sed -En 's/^.*"elapsedTime":\s*"?([0-9]+).*$/\1/p' /tmp/data |
    awk '$1 > 10000'

回答后续问题(评论),要挑选出两个元素,您需要从对象中过滤单个元素,然后显示所需的元素:

jq -r 'select (.elapsedTime > 10000) | [ .elapsedTime, .transactionId ] | @tsv ' /tmp/data

答案2

如果jq没有,sed可以使用。

ELAP=$(sed 's/.*"elapsedTime":\([0-9]*\).*/\1/' filename)

在线尝试一下!

相关内容