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

在Bash/Unix中用sed/awk/xmllint关联XML节点值生成CSV

用Unix工具提取XML中与/生成CSV

给定目标XML结构,需将<cod>节点的值与每个<Letture>节点下的<data>值配对,生成分号分隔的CSV行,以下是三种可行实现方案:

方法一:xmllint(推荐,XML专用工具)

利用xmllint的XPath查询能力精准处理XML,避免正则匹配的局限性:

# 先提取<cod>的值并去除多余空白
COD=$(xmllint --xpath 'string(//cod)' input.xml | xargs)
# 遍历所有<Letture>/<data>值,拼接成CSV行
xmllint --xpath '//Letture/data/text()' input.xml | xargs -I {} echo "$COD;{}"

方法二:awk(文本处理方案)

若环境无XML专用工具,可借助awk基于固定格式提取内容,创建脚本文件extract_csv.awk:

# 提取并清洗<cod>节点值
/^[[:space:]]*<cod>/ {
    gsub(/<\/?cod>/, "", $0)
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
    cod = $0
}
# 标记进入<Letture>节点范围
/^[[:space:]]*<Letture>/ { in_letture = 1 }
/^[[:space:]]*<\/Letture>/ { in_letture = 0 }
# 在<Letture>内提取<data>并拼接输出
in_letture && /^[[:space:]]*<data>/ {
    gsub(/<\/?data>/, "", $0)
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
    print cod ";" $0
}

执行命令:

awk -f extract_csv.awk input.xml

方法三:sed(轻量文本替换)

适合XML结构简单固定的场景,快速实现提取拼接:

# 提取<cod>的值
COD=$(sed -n 's/.*<cod>\(.*\)<\/cod>.*/\1/p' input.xml | xargs)
# 在<Letture>块内提取<data>并拼接输出
sed -n '/<Letture>/,/<\/Letture>/ s/.*<data>\(.*\)<\/data>.*/'"$COD;\\1"'/p' input.xml | xargs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:05:39