我想用约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
答案 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}'
说明:按关键字定义记录,拆分记录,找到匹配的记录,并用“无”替换缺失值