我希望从文件中提取 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
如果确实无法使用,可以考虑构建jq
。sed|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