разделение XML-файлов на несколько XML-файлов с помощью awk в Windows - PullRequest
0 голосов
/ 15 марта 2019

Я обнаружил, что команда 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 голосов
/ 16 марта 2019

Вы можете сделать это следующим образом:

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, для его вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...