简体   繁体   English

AWK脚本:将单列XML转换为CSV

[英]AWK Scripting: Convert Single Column XML to CSV

I am new to AWK-scripting, and need advice on converting a set of single-column data to a pivoted(?) set of CSV. 我是AWK脚本的新手,并且需要有关将一组单列数据转换为CSV的透视(?)组的建议。

The data resembles: 数据类似于:

<field1>A</field1>
<field2>B</field2>
<field3>C</field3>
<field1>1</field1>
<field2>2</field2>
<field3>3</field3>

...and I would like to generate: ...我想生成:

field1,field2,field3
A,B,C
1,2,3

Any assistance and advice would be greatly appreciated. 任何帮助和建议,将不胜感激。

Thank you! 谢谢!

tst.awk: tst.awk:

BEGIN{FS="[</>]"; OFS=","}
!($5 in label2colNr) {
    label2colNr[$5] = ++numCols
    colNr2label[numCols] = $5
}
{
    colNr = label2colNr[$5]
    val[++numRows[colNr],colNr] = $3
    maxRows = (numRows[colNr] > maxRows ? numRows[colNr] : maxRows)
}
END {
    for (colNr=1; colNr <= numCols; colNr++) {
        printf "%s%s", colNr2label[colNr], (colNr<numCols ? OFS : ORS)
    }

    for (rowNr=1; rowNr <= maxRows; rowNr++) {
        for (colNr=1; colNr <= numCols; colNr++) {
            printf "%s%s", val[rowNr,colNr], (colNr<numCols ? OFS : ORS)
        }
    }
}

Usage: awk -f tst.awk file.xml 用法: awk -f tst.awk file.xml

Output: 输出:

field1,field2,field3
A,B,C
1,2,3

Credits to: Ed Morton : https://stackoverflow.com/a/48252943/3776858 致谢: 埃德·莫顿(Ed Morton)https : //stackoverflow.com/a/48252943/3776858

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM