在Windows上使用AWK将xml文件拆分为多个xml文件

时间:2019-03-15 20:01:03

标签: xml windows awk syntax-error

我发现awk命令能够将输入的xml文件拆分为多个xml文件,并且在Linux环境中效果很好。

awk 'BEGIN {NUM=0}; /xml version="1.0"/ {NUM++; filename=NUM"Output.xml"}; {print >filename}' Inputfile.xml

但是,我试图在Windows命令提示符下运行它,并收到以下语法错误。您知道如何修改此命令以在Windows上成功运行吗?

awk "BEGIN {NUM=0}; /xml version="1.0"/ {NUM++; filename=NUM"Output.xml"}; {print >filename}" Inputfile.xml

awk: BEGIN {NUM=0}; /xml version=1.0/ {NUM++; filename=NUMOutput.xml}; {print >filename}
awk:                                                                ^ syntax error

1 个答案:

答案 0 :(得分:0)

您可以这样做:

awk 'BEGIN {NUM=0}; /xml version="1.0"/ {NUM++; filename=NUM "Output.xml"; print filename}; {print ^> filename}' Inputfile.xml

但是您的代码有问题,最好对此进行更改:

awk 'BEGIN {NUM=0; filename=NUM "Output.xml";}; /xml version="1.0"/ {NUM++; filename=NUM "Output.xml"; } {print ^> filename }' Inputfile.xml

filename在代码遇到第一行xml version="1.0"之前未初始化,它将引发错误。
因此,最好在BEGIN块中对其进行初始化。

或者只是:

awk 'BEGIN {NUM=0} /xml version="1.0"/ {NUM++} {print ^> NUM "Output.xml"}' Inputfile.xml

否则,您的代码中仅需要>进行转义,即在^中添加cmd
在使用批处理文件中或awk下的cmd的过程中,我逐渐开始喜欢在awk代码之外使用单引号,并注意那些字符需要转义。 -双引号中的字符不需要转义,其他字符需要转义。

另一种选择(通常是更好的选择)是将代码保存在xcode1.awk之类的文件中,并使用-f之类的awk -f xcode1.awk Inputfile.xml开关来调用它。

相关问题