아래와 같이 터미널에 출력을 표시하려면 jq를 사용하여 JSON 문자열을 표 형식으로 변환해야 합니다.
{
"results": [
[
{
"field": "@timestamp",
"value": "2023-07-03 08:28:00.000"
},
{
"field": "CpuReserved",
"value": "8192.0"
},
{
"field": "CpuUtilized",
"value": "4056.412942708333"
},
{
"field": "MemoryReserved",
"value": "61440"
},
{
"field": "MemoryUtilized",
"value": "4311"
},
{
"field": "@ptr",
"value": "CpABClUKUTE0NjcxNzAzNzI0NzovYXdzL2Vjcy9jb250YWluZXJpbnNpZ2h0cy9pcmwtaW5mcmEtc2hhcmVkLWplbmtpbnMtbWFpbi9wZXJmb3JtYW5jZRABEjUaGAIGSaxosQAAAAAd+TFeAAZKKHIwAAABEiABKIDF9taRMTDA7v3WkTE4BkC9NEjNPFCBIRgAEAAYAQ=="
}
],
[
{
"field": "@timestamp",
"value": "2023-07-03 08:28:00.000"
},
{
"field": "CpuReserved",
"value": "8192.0"
},
{
"field": "CpuUtilized",
"value": "4056.412942708333"
},
{
"field": "MemoryReserved",
"value": "61440"
},
{
"field": "MemoryUtilized",
"value": "4311"
},
{
"field": "@ptr",
"value": "CpABClUKUTE0NjcxNzAzNzI0NzovYXdzL2Vjcy9jb250YWluZXJpbnNpZ2h0cy9pcmwtaW5mcmEtc2hhcmVkLWplbmtpbnMtbWFpbi9wZXJmb3JtYW5jZRABEjUaGAIGSaxosQAAAAAd+TFeAAZKKHIwAAABEiABKIDF9taRMTDA7v3WkTE4BkC9NEjNPFCBIRgAEAEYAQ=="
}
]
]
}
터미널에 표시하고 싶은 내용은 다음과 같습니다.
@timestamp CpuReserved CpuUtilized MemoryReserved MemoryUtilized
==========================================================================================
2023-07-03 08:16:00.000 8192.0 410.5300065104166 61440 1417
2023-07-03 08:15:00.000 8192.0 702.310791015625 61440 792
누군가 나를 올바른 방향으로 안내할 수 있나요?
ベストアンサー1
아마도:
$ jq -c '.results[]|map(.key=.field)|from_entries|del(."@ptr")' file.json |
mlr --ijson --opprint --barred cat
+-------------------------+-------------+-------------------+----------------+----------------+
| @timestamp | CpuReserved | CpuUtilized | MemoryReserved | MemoryUtilized |
+-------------------------+-------------+-------------------+----------------+----------------+
| 2023-07-03 08:28:00.000 | 8192.0 | 4056.412942708333 | 61440 | 4311 |
| 2023-07-03 08:28:00.000 | 8192.0 | 4056.412942708333 | 61440 | 4311 |
+-------------------------+-------------+-------------------+----------------+----------------+
그렇지 않은 경우 --barred
다음과 같습니다.
@̲t̲i̲m̲e̲s̲t̲a̲m̲p̲ C̲p̲u̲R̲e̲s̲e̲r̲v̲e̲d̲ C̲p̲u̲U̲t̲i̲l̲i̲z̲e̲d̲ M̲e̲m̲o̲r̲y̲R̲e̲s̲e̲r̲v̲e̲d̲ M̲e̲m̲o̲r̲y̲U̲t̲i̲l̲i̲z̲e̲d̲ 2023-07-03 08:28:00.000 8192.0 4056.412942708333 61440 4311 2023-07-03 08:28:00.000 8192.0 4056.412942708333 61440 4311
jq
또한 이 명령의 출력을 vd -f json
(시각적 데이터) 바꾸다 mlr
(밀러) 대화형 테이블 뷰어를 얻으려면
jq
정보를 추출하고 mlr
테이블 형식을 지정하는 데만 사용됩니다 . 의 기능 세트 와 의 기능 세트 jq
사이에는 약간의 중복이 있습니다 mlr
. 예를 들어 s를 @ptr
사용하여 열을 삭제할 수도 있습니다 .mlr
cut
jq -c '.results[]|map(.key=.field)|from_entries' file.json |
mlr --ijson --opprint cut -xf @ptr
명령 이 jq
세분화되어 주석 처리되었습니다.
jq -c '
.results[] | # iterate over the elements of the .results array
# (which are also arrays)
map(.key=.field) | # for each of those arrays, transform the
# elements (which are objects) by adding a
# field of key "key" with same value as that
# with "field" key in each, as that's what
# from_entries needs
from_entries | # transforms those [{"key":"foo","value":"bar"}]
# (the "field" field is ignored) to {"foo":"bar"}
del(."@ptr") # deletes the field with key "@ptr" from those
# objects' file.json
결과는 JSON이 아니지만 여러 JSON이 함께 연결되어 있지만 둘 다 jq
지원됩니다 mlr
. (컴팩트) 의 경우 -c
이는 줄당 하나의 JSON이 있는 NDJSON(줄바꿈으로 구분된 JSON)이며 vd
올바른 JSON을 얻으려면 다음이 필요합니다.
jq -c '.results|map(map(.key=.field)|from_entries|del(."@ptr"))' file.json
우리 map
는 이것을 배열에서 사용하므로 .results
요소를 반복하는 대신 다른 JSON 배열을 생성합니다. 따라서 최종 결과는 큰 배열입니다. 이는 또한 지원되며 jq
(분명히 올바른 JSON임) 에 대한 입력 시간이 약간 길기 때문에 도구가 작업을 수행하기 전에 끝까지 읽어야 함을 의미 mlr
합니다 . 그러나 실제로 이것이 성능에 어떤 영향을 미치는지 확인하지 않았습니다.vd
]