powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Помогите с алгоритмом на shell, пожалуйста
4 сообщений из 4, страница 1 из 1
Помогите с алгоритмом на shell, пожалуйста
    #38761897
the_strelock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется файл tm.csv
С форматом: xxx,yyy,zzz…
В шестой колонке содержаться ID.

Второй файл rs.xml
В нем "этиже" ID содержаться в тегах <ID> & </ID>.
Теги ID по схеме помещены в теги <PROD_TYPE> & </PROD_TYPE> в них есть и другие…
<PROD_TYPE>

<ID>
</ID>

</PROD_TYPE>


Нужно по ID из tm.csv вывести соответствующие секции <PROD_TYPE> из rs.xml.

(awk ' BEGIN {FS=","} {print $6} ' tm.csv) #получили все ID из tm.csv

Но нужно получить след. Картину:

ID
<PROD_TYPE>

<ID>
</ID>

</PROD_TYPE>


ID
<PROD_TYPE>

<ID>
</ID>

</PROD_TYPE>

Подскажите, пожалуйста, как по ID вывести целиком секцию <PROD_TYPE> к которой он принадлежит???

Grep с ключами -A и -B не подходит, т.к. Кол-во строк в тегах <PROD_TYPE> может сильно варьироваться…

Нужна какая-то выборка тегов <PROD_TYPE> с проверкой условий, что ID совпадает, который в нем… я не могу придумать реализуемый алгоритм…
...
Рейтинг: 0 / 0
Помогите с алгоритмом на shell, пожалуйста
    #38762553
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично я бы делал так

предполагаем большие файлы, тоесть хранить много в оперативке...самому бегать по файлу
выискивая нужную часть в цикле - не варианты...

ещо добавим одно требование - не нарушать форматирование файла хмл

это отсекает вариант любой, требующий сортировки хмл файла.

раз не может сортировать, чтобы нужное всплыло вверх/ в конец файла
значит надо индексировать

седом
бежим по хмл, получаем индексы

из
<PROD_TYPE>

<ID>
XX
</ID>

</PROD_TYPE>

ХХ №строка_начала №строки_конца

пробежав по цсв, получить просто номера айдишников(один айди = одна строка)

сливаем всё в один файл и пропускаем через сортировку

получим

аля айди есть и секция в хмл есть
хх
хх 10 20
уу
сс 60 70

хх есть и айди и секция хмл
уу айди есть секции нету в хмл
сс в хмл есть но нету айдишника в цсв

старым добрым седом получаем из выше - файл где просто в строках по два номера
с по строчек из хмл для вывода.

ЗЫ
я бы из файла
10 20
100 110
200 210
сделал бы файл команд для седа
10,20p
100,110p
200,210p
...

файл может получиться большим - и для оперативки сложно будет...разбить на несколько
ну и прогнать хмл оригинальный через сед, с файлом команд выше.

это в лоб что приходит на ум
...
Рейтинг: 0 / 0
Помогите с алгоритмом на shell, пожалуйста
    #38763347
the_strelock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясно до момента:
ХХ №строка_начала №строки_конца
ID в несколько символов, и точно в одной строке:
e.g. <ID>FR_DM</ID>

а дальше номера строк каких?
<PROD_TYPE> и </PROD_TYPE>

Модератор: Тема перенесена из форума "Программирование".

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
Помогите с алгоритмом на shell, пожалуйста
    #38766378
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
the_strelockясно до момента:
ХХ №строка_начала №строки_конца
ID в несколько символов, и точно в одной строке:
e.g. <ID>FR_DM</ID>

а дальше номера строк каких?
<PROD_TYPE> и </PROD_TYPE>

Модератор: Тема перенесена из форума "Программирование".

Модератор: Тема перенесена из форума "Программирование".

да, номера строк, это начало и конец блока с нужным айдишником.

ЗЫ
похоже индексы с джоином в субд сработают
сначала будет получени список айди - адрес где храниться строка таблицы, а потом по этому списку считывание данных из файла
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Помогите с алгоритмом на shell, пожалуйста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]