在RedHat 7.9中用AWK将Visual TOM XML转多份CSV的可行性问询
用AWK在RedHat 7.9实现Visual TOM XML到多份CSV的转换
完全可以用AWK实现你的需求,RedHat 7.9自带的GNU AWK(gawk)具备处理XML结构化文本的能力,能轻松应对属性缺失、多重复子节点(参数、资源)这类场景。
核心实现思路
针对你需要的7份CSV,可按以下逻辑编写AWK脚本:
1. 应用属性CSV
- 跟踪
<application>标签块,提取应用名称、retained、comment等属性; - 遇到
</application>时,将收集到的字段输出到app_attributes.csv,缺失属性用空值填充以保证列对齐。
2. 应用/作业属性CSV
- 先捕获当前应用名称,进入
<job>块后提取作业名称、retained、comment、information等属性; - 每条作业对应一行记录,输出到
app_job_attributes.csv,缺失属性留空。
3. 应用/作业脚本CSV
- 在
<job>块内定位<script>标签,处理可能的多行脚本内容,拼接完整文本; - 关联当前应用和作业名称,输出到
app_job_scripts.csv。
4. 应用/作业参数CSV
- 在
<job>块内遍历所有<parameter>子节点,每个参数单独占一行; - 每行关联对应的应用和作业名称,输出到
app_job_parameters.csv。
5. 应用/作业ExpectedResource CSV
- 遍历
<job>内的<ExpectedResource>节点,提取资源名称等属性; - 每条资源对应一行记录,关联应用和作业名称后输出到
app_job_resources.csv。
6. 应用/作业Node属性CSV
- 在
<job>块内提取<node>标签的x、y、z属性; - 关联应用和作业名称,输出到
app_job_nodes.csv。
7. 应用Node属性CSV
- 在
<application>块内提取自身的<node>标签属性; - 关联应用名称,输出到
app_nodes.csv。
关键实现技巧
- 用变量标记当前上下文(比如
in_app、in_job),明确当前处于应用还是作业块; - 用
sub()或gsub()正则匹配提取XML属性值,例如sub(/.*name="([^"]+)".*/, "\\1", $0)提取名称属性; - 处理多行内容(如脚本)时,可临时修改记录分隔符
RS,或逐行拼接文本; - 提前定义各CSV的表头,确保输出的CSV结构统一。
内容的提问来源于stack exchange,提问作者Romain93110
相关产品推荐
相关产品推荐

