【问题标题】:splitting xml files into multiple xml file using awk on Windows在 Windows 上使用 awk 将 xml 文件拆分为多个 xml 文件
【发布时间】:2019-08-06 23:08:13
【问题描述】:

我发现 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

【问题讨论】:

    标签: xml windows awk syntax-error


    【解决方案1】:

    你可以这样做:

    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前面加上^
    在我在批处理文件中或cmd 下使用awk 的这些年中,我逐渐喜欢在awk 代码之外使用单引号,并注意这些字符需要转义。 -- 双引号内的字符不需要转义,其他的需要。

    另一种选择,很多时候更好,是将代码保存在xcode1.awk 之类的文件中,然后使用-f 开关(例如awk -f xcode1.awk Inputfile.xml)来调用它。

    【讨论】:

    • 我可以通过按照您的建议创建一个 test.awk 文件来使其工作 - BEGIN {NUM=0}; /xml 版本="1.0"/ {NUM++; filename=NUM"TestResult.xml";} {print >filename} 然后将其作为 awk -f test.awk Inputfile.xml 运行。脚本逻辑工作正常,但问题在于 Windows 双引号处理,因此将其放入脚本中似乎可行。谢谢!
    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多