아래와 같이 터미널에 출력을 표시하려면 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
]
答え2
그 후에는 다음이 있습니다.
$ jq -r '.results|map(map({key:.field,value}|select(.key!="@ptr"))|from_entries)|(.[0]|keys_unsorted) as $keys|([$keys]+map([.[$keys[]]]))[]|@csv' input.json | xsv table
@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
노트:
from_entries
키-값 쌍의 배열을 객체로 변환합니다.- 객체 배열을 csv로 변환하려면:세부 사항을 확인하세요.
xsv table
예쁜 프린팅을 위해서만 제거 가능합니다.
答え3
나는 답을 찾은 것 같아요:
jq -r '([ "@timestamp", "CpuReserved", "CpuUtilized", "MemoryReserved", "MemoryUtilized"] | (., map(length*"-"))), ( .results[] | [.[0,1,2,3,4].value] ) | @tsv' |column -ts $'\t'
@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
2023-07-03 08:27:00.000 8192.0 1056.0744270833331 61440 4436
2023-07-03 08:27:00.000 8192.0 1056.0744270833331 61440 4436
2023-07-03 08:26:00.000 8192.0 2756.6764583333334 61440 5138
2023-07-03 08:26:00.000 8192.0 2756.6764583333334 61440 5138
2023-07-03 08:25:00.000 8192.0 5715.494895833333 61440 6600
2023-07-03 08:25:00.000 8192.0 5715.494895833333 61440 6600
2023-07-03 08:24:00.000 8192.0 7977.704166666666 61440 8451
2023-07-03 08:24:00.000 8192.0 7977.704166666666 61440 8451
2023-07-03 08:23:00.000 8192.0 7288.051666666666 61440 4757
2023-07-03 08:23:00.000 8192.0 7288.051666666666 61440 4757
2023-07-03 08:22:00.000 8192.0 4286.02375 61440 4815
2023-07-03 08:22:00.000 8192.0 4286.02375 61440 4815
2023-07-03 08:21:00.000 8192.0 3357.523776041666 61440 2146
2023-07-03 08:21:00.000 8192.0 3357.523776041666 61440 2146
2023-07-03 08:20:00.000 8192.0 990.2647916666666 61440 1692
2023-07-03 08:20:00.000 8192.0 990.2647916666666 61440 1692
2023-07-03 08:19:00.000 8192.0 4533.409375 61440 1816
2023-07-03 08:19:00.000 8192.0 4533.409375 61440 1816
2023-07-03 08:18:00.000 8192.0 939.4855208333333 61440 1810
2023-07-03 08:18:00.000 8192.0 939.4855208333333 61440 1810
2023-07-03 08:17:00.000 8192.0 4770.659791666667 61440 1924
2023-07-03 08:17:00.000 8192.0 4770.659791666667 61440 1924
2023-07-03 08:16:00.000 8192.0 410.5300065104166 61440 1417
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
2023-07-03 08:15:00.000 8192.0 702.310791015625 61440 792
2023-07-03 08:14:00.000 8192.0 0.0 61440 0
2023-07-03 08:14:00.000 8192.0 0.0 61440 0
答え4
jq
탭으로 구분된 값을 내보내고 column
아름답게 만드는 또 다른 방법
jq -r '
.results
| first as $first
| [$first | map(.field)] + [.[] | map(.value)]
| map(.[:-1])[]
| @tsv
' file.json | column -t -s $'\t'
@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