[英]Generate JSON using Dynamic Variable in Shell script
我需要從我的shell腳本生成JSON輸出。 我需要獲取特定機器的Ram插槽詳細信息並使用這些詳細信息生成JSON。 要獲取Ram詳細信息,我使用的是system_profiler SPMemoryDataType
它生成如下詳細信息。
BANK 0/DIMM0:
Size: 2 GB
Type: DDR3
Speed: 1600 MHz
Status: OK
Manufacturer: 0x802C
Part Number: 0x384A54463235363634485A2D3147364D3120
Serial Number: 0xE98388E6
BANK 1/DIMM0:
Size: 2 GB
Type: DDR3
Speed: 1600 MHz
Status: OK
Manufacturer: 0x802C
Part Number: 0x384A54463235363634485A2D3147364D3120
Serial Number: 0xE98388E5
從那以后我應該像這樣形成JSON
[
{"Bank":"0/DIMM0","Serial Number":"0xE98388E6","Status":"OK"},
{"Bank":"1/DIMM0","Serial Number":"0xE98388E5","Status":"OK"}
]
要提取單獨的詳細信息,如銀行,序列號,狀態我們可以使用
system_profiler SPMemoryDataType | awk '/Bank/
system_profiler SPMemoryDataType | awk '/Serial/
system_profiler SPMemoryDataType | awk '/Status/
我確信需要使用Dynamic變量從結果中執行表單json。 但由於我是shell腳本的新手,我很困惑。 有沒有辦法從輸出生成JSON?
#!/usr/bin/awk -f
$1 == "BANK" {
bank = $2
sub(/:/, "", bank)
while (getline > 0) {
if ($1 == "Serial" && $2 == "Number:") {
serial_number = $3
} else if ($1 == "Status:") {
status = $2
}
if (serial_number != "" && status != "") {
entries[++e] = "{\"Bank\":\"" bank "\",\"Serial Number\":\"" serial_number "\",\"Status\":\"" status "\"}"
break
}
}
bank = serial_number = status = ""
}
END {
print "["
if (e > 0) {
printf "%s", entries[1]
for (i = 2; i <= e; ++i) {
printf ",\n%s", entries[i]
}
print ""
}
print "]"
}
用法:
awk -f script.awk file
system_profiler SPMemoryDataType | awk -f script.awk
示例輸出:
[
{"Bank":"0/DIMM0","Serial Number":"0xE98388E6","Status":"OK"},
{"Bank":"1/DIMM0","Serial Number":"0xE98388E5","Status":"OK"}
]
在shell腳本中使用:
#!/bin/bash
system_profiler SPMemoryDataType | awk '$1 == "BANK" {
bank = $2
sub(/:/, "", bank)
while (getline > 0) {
if ($1 == "Serial" && $2 == "Number:") {
serial_number = $3
} else if ($1 == "Status:") {
status = $2
}
if (serial_number != "" && status != "") {
entries[++e] = "{\"Bank\":\"" bank "\",\"Serial Number\":\"" serial_number "\",\"Status\":\"" status "\"}"
break
}
}
bank = serial_number = status = ""
}
END {
print "["
if (e > 0) {
printf "%s", entries[1]
for (i = 2; i <= e; ++i) {
printf ",\n%s", entries[i]
}
print ""
}
print "]"
}'
單行:
system_profiler SPMemoryDataType | awk '$1=="BANK"{bank=$2;sub(/:/,"",bank);while(getline>0){if($1=="Serial"&&$2=="Number:"){serial_number=$3}else if($1=="Status:"){status=$2};if(serial_number!=""&&status!=""){entries[++e]="{\"Bank\":\""bank"\",\"SerialNumber\":\""serial_number"\",\"Status\":\""status"\"}";break}};bank=serial_number=status=""}END{print "[";if(e>0){printf "%s",entries[1];for(i=2;i<=e;++i){printf ",\n%s",entries[i]};print""};print "]"}'
有一些庫可以這樣做..一個這樣的事情是https://github.com/jeganathgt/libjson-sh 。 它是獨立的shell腳本庫,提供簡單方便的API來在控制台中生成json輸出。
例如:
json_init
json_add_string "serial" "$<cmd>"
json_add_string "bankinfo" "$<cmd>"
json_add_string "status" "$<cmd>"
json_dump
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.