AWK脚本:将单列XML转换为CSV [英] AWK Scripting: Convert Single Column XML to CSV
本文介绍了AWK脚本:将单列XML转换为CSV的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是AWK脚本的新手,并且需要将一组单列数据转换为CSV的可透视(?)集合的建议.
I am new to AWK-scripting, and need advice on converting a set of single-column data to a pivoted(?) set of CSV.
数据类似于:
<field1>A</field1>
<field2>B</field2>
<field3>C</field3>
<field1>1</field1>
<field2>2</field2>
<field3>3</field3>
...我想生成:
field1,field2,field3
A,B,C
1,2,3
任何帮助和建议将不胜感激.
Any assistance and advice would be greatly appreciated.
谢谢!
推荐答案
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)
}
}
}
用法:awk -f tst.awk file.xml
输出:
field1,field2,field3
A,B,C
1,2,3