我尝试重新格式化传感器命令的输出:
sensors -j ftsteutates-i2c-0-73
{
"ftsteutates-i2c-0-73":{
"Adapter": "SMBus I801 adapter at efa0",
"VCC 3.3V":{
"in0_input": 3.331
},
"3.3V AUX":{
"in1_input": 3.359
},
"V_IN (12V)":{
"in2_input": 12.012
},
"VBAT 3.0V":{
"in3_input": 2.692
},
"CPU":{
"fan1_input": 660.000,
"fan1_alarm": 0.000,
"fan1_fault": 0.000
},
"Chassis":{
"fan3_input": 1200.000,
"fan3_alarm": 0.000,
"fan3_fault": 0.000
},
"CPU":{
"temp1_input": 51.000,
"temp1_alarm": 0.000,
"temp1_fault": 0.000
},
"Ambient":{
"temp2_input": 44.000,
"temp2_alarm": 0.000,
"temp2_fault": 0.000
},
"Core":{
"temp3_input": 54.000,
"temp3_alarm": 0.000,
"temp3_fault": 0.000
},
"Memory":{
"temp4_input": 42.000,
"temp4_alarm": 0.000,
"temp4_fault": 0.000
},
"PCH":{
"temp5_input": 54.000,
"temp5_alarm": 0.000,
"temp5_fault": 0.000
},
"Graphics":{
"temp6_input": 40.000,
"temp6_alarm": 0.000,
"temp6_fault": 0.000
}
}
}
我期待的是:
sensors -j ftsteutates-i2c-0-73 | jq '."ftsteutates-i2c-0-73" | del(."Adapter") | ???'
{
"VCC 3.3V": 3.331,
"3.3V AUX": 3.359,
"V_IN (12V)": 12.012,
"VBAT 3.0V": 2.692,
"CPU": 51.000,
"Chassis": 1200.000,
"Ambient": 44.000,
"Core": 54.000,
"Memory": 42.000,
"PCH": 54.000,
"Graphics": 40.000
}
但我不知道如何映射子项的值,并删除 *_alarm 和 *_fault 子项或仅选择第一个子项,它始终是 *_input 键。
我得到了正确答案:
sensors -j ftsteutates-i2c-0-73 | jq '."ftsteutates-i2c-0-73" | del(."Adapter") | with_entries(.value |= if type == "object" then with_entries(select(.key | endswith("_input"))) | .[] else . end)'
此命令执行以下操作:
with_entries(.value |= if type == "object" then with_entries(select(.key | endswith("_input"))) | .[] else . end):
迭代每个键值对,如果值是对象,则选择键以 _input 结尾的条目,然后提取值。
这给了我想要的输出