파일에서 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

실제로 작동하지 않으면 빌드하는 것을 고려하십시오 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

답변2

jq그렇지 않은 경우 sed사용할 수 있습니다.

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

온라인으로 사용해 보세요!

관련 정보