如何使用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
相关产品推荐
相关产品推荐

