用awk压平xml

时间:2015-09-03 20:07:23

标签: xml awk flatten

我想用约20000行压平xml文件。

示例输入

 <start>                             
     <request>523331111111111</request>   
     <odbs>1</odbs>          
     <request>523331111111112</request>  
     <odbs>0</odbs>          
     <request>523331111111113</request>  
     <odbs>1</odbs>          
     <request>523331111111114</request>                
     <request>523331111111115</request>  
     <odbs>2</odbs>        
 </start>

预期输出

523331111111111,1
523331111111112,0
523331111111113,1
523331111111114,none
523331111111115,2

2 个答案:

答案 0 :(得分:3)

$ cat tst.awk
BEGIN { FS="[<>]"; OFS="," }
/<request>/ { if (req!="") print req, odbs; req=$3; odbs="none" }
/<odbs>/    { odbs=$3 }
END { if (req!="") print req, odbs }

$ awk -f tst.awk file
523331111111111,1
523331111111112,0
523331111111113,1
523331111111114,none
523331111111115,2

以上将适用于任何awk,无论哪个“odbs”值丢失都会产生正确的输出,包括最后一个,并且不会为空输入文件产生输出(总是可取的)。

答案 1 :(得分:2)

拯救......

您的数据样本中存在拼写错误,但此脚本无关紧要

awk -F "[<>]" -vRS="<request>" -vOFS="," 'NR>1{print $1, $5==""?"none":$5}'

说明:按关键字定义记录,拆分记录,找到匹配的记录,并用“无”替换缺失值