You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

除了awk substr截取,如何更好解析含空格多列的CLI命令输出?

更健壮的解析方案

针对你遇到的带空格的Value列解析问题,以下几种方法比固定位置截取更可靠,无需依赖输出的列偏移(比如第68位):

方法1:用awk移除前三个字段及分隔符

直接跳过表头行,通过正则匹配移除开头的Id、Name、Iid三个字段及其后的分隔符,保留剩余所有内容:

show attributes attr=0x1006e mh=0x12003ea | awk 'NR==1 {next} {sub(/^[^\t ]+[ \t]+[^\t ]+[ \t]+[^\t ]+[ \t]+/, ""); print}'
  • 逻辑:NR==1 {next}跳过表头;正则^[^\t ]+[ \t]+匹配单个字段(兼容空格或制表符分隔),连续三次匹配后替换为空,剩下的就是完整的Value内容。

方法2:awk遍历拼接第4到最后一个字段

如果确定Value从第4个字段开始,遍历拼接所有后续字段并处理末尾空格:

show attributes attr=0x1006e mh=0x12003ea | awk 'NR>1 {
    val = ""
    for(i=4; i<=NF; i++) val = val $i " "
    sub(/ $/, "", val)  # 移除末尾多余空格
    print val
}'
  • 逻辑:NF是当前行的字段总数,从第4个字段开始逐个拼接,最后去掉拼接产生的末尾空格。

方法3:结合tr和cut处理

先压缩多空格为单空格,再按空格分隔截取第4及以后的字段:

show attributes attr=0x1006e mh=0x12003ea | grep -v "Id" | tr -s ' ' | cut -d' ' -f4-
  • 逻辑:grep -v "Id"跳过表头;tr -s ' '把连续空格压缩成单个;cut -d' ' -f4-截取第4个到最后的所有字段。

这些方法的优势是不依赖固定列位置,如果后续Id、Name的长度变化,解析逻辑依然有效,比substr($0,68)更健壮。

内容的提问来源于stack exchange,提问作者DanL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:43:13