{
"db_status": {
"sysa": {
"taskname": "AB",
"state": "Running",
"status": "System ATTENTION",
"updated": "0727",
"version": "5"
},
"sysb": {
"taskname": "null",
"state": "Standby",
"status": "System OK",
"updated": "0727",
"version": "6"
}
}
}
CURL命令返回json对象。试图在数组中获取两个状态变量,即运行和待机。到目前为止我已经尝试了
curl -s http://localhost:9099/api | grep state | sed 's/"//g' | awk -F ": " '/state/ {print $2}' | tr '\n' ' ' | sed s'/..$//'
答案 0 :(得分:2)
当你使用awk时,你不需要20个不同命令的管道。您提供的命令行只能写为一个命令:
awk -F'"' '$2=="state"{printf "%s%s", (++c>1?", ":""),$4}'
但你真正需要的是:
awk -F'"' '$2=="state"{print $4}'
并将输出保存在shell数组中(假设您的json实际上始终按照您在问题中显示的格式化)将是:
$ arr=( $(cat file | awk -F'"' '$2=="state"{print $4}') )
$ echo "${arr[0]}"
Running
$ echo "${arr[1]}"
Standby
将cat file
替换为curl
命令。
答案 1 :(得分:1)