Приветствую! Ниже распишу задачу более подробно. Надо слить несколько однотипных XML-файлов в один большой XML, не потеряв при этом информацию об исходных файлах. Сохранять информацию предлагается в дополнительных тегах, которые добавятся в основной текст. Исходные XML-файлы представляют собой длинные строки, т.е., в первой строке лежит заголовок XML, а в следующих - записи XML, по одной записи на строку. Идея такая - шаблон имени файла (из входного параметра) разобрать в один массив Tag, имя текущего файла разобрать в другой массив FNPart, потом склеить из них XML-подобную строку вида <Tag[1]><FNPart[1]></Tag[1]> ... <Tag[n]><FNPart[n]></Tag[n]>, после этого выкинуть из очередного файла строку №1 (с заголовком) и работать только с остальными, заменяя в них самое первое вхождение сочетания >< на ><Tag[1]><FNPart[1]></Tag[1]> ... <Tag[n]><FNPart[n]></Tag[n]><. Этим я добьюсь добавления в текуший файл XML информации о названии этого файла. А потом я возьму шаблон заголовка (заголовок XML + открывающий общий тег), прилью к нему полученные строки из разных файлов XML с внедрённой информацией и закрою файл шаблоном подвала XML (закрывающий общий тег). Таким образом получается, что надо два раза использовать split, затем выводить результат склеивания в переменную shell, затем sed будет менять (начиная со второй строки) первое вхождение >< и менять его на >переменная<. Пока я завис на этапе ввода в awk переменной скрипта, хранящей шаблон имени файла. Подключенная внешняя переменная не видится в программе awk:for file in `cat /$FileListFN`; do echo `awk '{print $FNT} {N=split($FNT,Tags,"_")} {for (i=1; i<=N; i++) {print Tags[i] " | "} } {exit} ' $file -v FNT=$FileNameTemplate` done {exit} нужен для того, чтобы обрабатывать всё только один раз. Этот скрипт почему-то ничего не выводит, ждёт ввода с клавиатуры...
|