我有從這個命令回傳的這個 json:./kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe
{
"version": 1,
"brokers": [
{
"broker": 0,
"logDirs": [
{
"logDir": "/var/lib/kafka/data/kafka-log0",
"error": null,
"partitions": [
{
"partition": "pfxdata-mutation-5",
"size": 1326989,
"offsetLag": 0,
"isFuture": false
},
{
"partition": "__consumer_offsets-13",
"size": 0,
"offsetLag": 0,
"isFuture": false
},
{
"partition": "events.oxf-5",
"size": 279158658,
"offsetLag": 0,
"isFuture": false
}
]
}
]
},
{
"broker": 1,
"logDirs": [
{
"logDir": "/var/lib/kafka/data/kafka-log1",
"error": null,
"partitions": [
{
"partition": "__consumer_offsets-46",
"size": 0,
"offsetLag": 0,
"isFuture": false
},
{
"partition": "events.oxfcs-10",
"size": 0,
"offsetLag": 0,
"isFuture": false
}
]
}
]
}
]
}
我想做一個命令或 bash 腳本來顯示如下內容:
broker 0
Topics Size
pfxdata-mutation-5 1326989
__consumer_offsets-13 0
events.oxf-5 279158658
total size 280485647
broker1
Topics Size
__consumer_offsets-46 0
events.oxfcs-10 0
total size 0
所以顯示磁區的大小,然后將所有磁區相加,然后將其顯示在終端上。我對 bash 腳本非常陌生,所以我不知道如何開始這樣做。謝謝
uj5u.com熱心網友回復:
試試這個腳本:
#!/bin/bash
temp=$(jq length sample.json)
len=$((temp-1))
x=0
while [ $x -le $len ]
do
partitions=$(jq ".brokers[${x}].logDirs[].partitions[]" sample.json)
part_size=$(jq ".brokers[${x}].logDirs[].partitions" sample.json)
total_size=$(echo $part_size | jq 'map(.size) | add')
echo "broker ${x}"
echo 'Topics Size'
echo $partitions | jq -r '"\(.partition)\t\(.size)"'
echo "total size ${total_size}"
printf "\n"
x=$(( $x 1 ))
done
使用您的檔案替換sample.json
檔案。
uj5u.com熱心網友回復:
這是一個樸素的變體,只有jq
:
jq -r '.brokers[]
|.broker,
(.logDirs[].partitions as $parts
|($parts[]|[.partition,.size]),
["total size",([$parts[].size]|add)]
|@tsv
)' sample.json
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487327.html
上一篇:gsed用帶單引號的變數$i替換