如何通过jq字符串拼接将lscpu命令输出自定义为单行?
问题原因
你之前的拼接写法失效,是因为遍历.lscpu数组时,每个元素只能匹配其中一个select筛选条件,无法在单个元素上同时拿到两个字段的值,因此拼接操作无法返回有效结果。
解决方案
这里提供两种可行的实现方式:
方法1:先筛选再拼接
lscpu -J | jq -r '.lscpu | map(select(.field == ("CPU(s):", "Model name:")).data) | join(" x ")'
逻辑说明:先从.lscpu数组中筛选出两个目标字段的data值,得到双元素数组后直接用join方法拼接为单行字符串。
方法2:临时存储数组后分别取值拼接
lscpu -J | jq -r '.lscpu as $all | ($all[] | select(.field=="CPU(s):").data) + " x " + ($all[] | select(.field=="Model name:").data)'
逻辑说明:先把整个.lscpu数组存为临时变量,再分别从全量数组中提取两个目标字段的值做拼接,规避单个元素无法同时匹配两个条件的问题。
输出效果
两种命令执行后都会得到预期的单行结果:
4 x AMD A4-6210 APU with AMD Radeon R3 Graphics
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

