Text-Processing

如何從文件中提取 elapsedTime 屬性值

  • October 11, 2021

我希望從文件中提取 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. 

數據是 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'

在回答後續問題 ( comment ) 時,要選擇兩個元素,您需要從對像中過濾單個元素,然後顯示所需的元素:

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

引用自:https://unix.stackexchange.com/questions/672771