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

如何使用shell脚本提取YAML文件中指定数组最后一行的末尾值

方案二:基于你现有parse_yaml函数修改

如果不想安装额外工具,可以调整现有代码实现。你写的parse_yaml函数会把YAML结构转换为下划线分隔的Shell变量,补充变量加载和提取逻辑即可:

#!/bin/bash

function parse_yaml {
   local prefix=$2
   local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
   sed -ne "s|^\($s\):|\1|" \
        -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
        -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p"  $1 |
   awk -F$fs '{
      indent = length($1)/2;
      vname[indent] = $2;
      for (i in vname) {if (i > indent) {delete vname[i]}}
      if (length($3) > 0) {
         vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
         printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
      }
   }'
}

# 把parse_yaml输出的变量加载到当前Shell环境
eval $(parse_yaml nastran_acceleration_matrix.yml)

# 提取acceleration_matrix的最后一行内容
last_row=$(set | grep ^acceleration_matrix_ | sort -t '_' -k 3n | tail -n1 | cut -d '=' -f2 | tr -d '"')

# 提取最后一行的最后一个数值
number_load_case=$(echo "$last_row" | tr -d '[] ' | awk -F ',' '{print $NF}')

# 验证结果
echo $number_load_case

注意:手动实现的YAML解析函数兼容性有限,仅支持格式非常规整的YAML文件,若后续YAML格式有调整(比如增加嵌套、特殊字符)很容易失效,优先推荐方案一。


内容的提问来源于stack exchange,提问作者elle.delle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:18:03