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

如何在Bash中将cat命令处理XML的多段输出格式化为表格

解决方案

你之前的写法是批量提取所有文件的同一类字段,三个字段的输出是独立的长列表,无法一一对应到同一个元素的属性。只要改成逐个处理每个XML文件,同一文件内提取三个属性拼成一行即可实现对齐的表格输出:

可行脚本示例

# 打印表头,用占位符控制列对齐
printf "%-8s %-8s %s\n" "Symbol" "Number" "Weight"

# 遍历所有元素XML文件
for f in elements/*.xml; do
  # 分别提取当前文件的三个字段值
  symbol=$(sed -n 's/.*<symbol>\(.*\)<\/symbol>.*/\1/p' "$f" | tr '|' ' ')
  num=$(sed -n 's/.*<atomic-number>\(.*\)<\/atomic-number>.*/\1/p' "$f" | tr '|' ' ')
  weight=$(sed -n 's/.*<atomic-weight>\(.*\)<\/atomic-weight>.*/\1/p' "$f" | tr '|' ' ')
  # 按对齐格式打印当前元素的一行数据
  printf "%-8s %-8s %s\n" "$symbol" "$num" "$weight"
done

说明

  • 用printf的%-8s左对齐占位符控制每列宽度为8个字符,自动补空格实现列对齐,效果和你给出的期望输出完全一致
  • 如果你习惯用grep,也可以把sed提取的部分换成grep环视写法,比如grep -oP '(?<=<symbol>).*(?=</symbol>)' "$f",逻辑完全相同
  • 所有tr '|' ' '的逻辑和你原有代码保持一致,保留你原有的替换需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:04