Здраствуйте.
Достался мне по наследству файл вот такого вида:
есть необходимость привести его к другому виду:
Даже не знаю с чего начать.
Подскажите идеи или хотя бы направьте в нужном направлении.
Желательно на shell.
Заранее спасибо!
Помогите по парсингу
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите по парсингу
Вот, нарисовал нечто похожее...
Чистый Шелл. Может можно и проще. Это первое что пришло, как говорится, в голову
Вроде работает, наверняка не универсально, но направление указано.
Ну а фенечки типа очистки временных файлов сами сделаете, если нужно
Чистый Шелл. Может можно и проще. Это первое что пришло, как говорится, в голову

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

Код: Выделить всё
#!/bin/sh
#
# rejoin.sh
# 2011-12-29 22:00:17
# kohan pavel e-mail: kpp77@yandex.ru ICQ: 92819905
# Description: for comrade capsmolet ;)
# version 1
#
in_file="${1}"
out_file="${2}"
in_file="${out_file+frm.txt}"
out_file="${out_file+frm_et.txt}"
list="`grep -nE "^ {17}I [^0-9]{1,2}[1-9]{1,2} [^0-9]*.*$" "${in_file}" | sed 's/^\([0-9]*\): [^I]*I [^1-9]*\([1-9]*\).*$/\1 \2/'`"
gr=0
gr_i=0
echo "${list}" | ( while read num id
do
if [ ${id} -eq 1 ]; then
[ ${gr} -eq 0 ] || sed 's/^[ 0-9]*>\(.*\)$/\1/' "${fl_base}" > "${gr}_0"
gr_i=1
gr=`expr ${gr} + 1`
fi
if [ ${gr} -eq 1 ]; then
num=`expr ${num} - 10`
else
num=`expr ${num} + 2`
fi
if [ ${id} -eq 1 ]; then
sed -n ${num}',/^.$/{; p; /^.$/{; q; }; }' "${in_file}" | tr -d "\015" | cat -n > "${gr}_${gr_i}"
fl_base="${gr}_${gr_i}"
else
gr_i=`expr ${gr_i} + 1`
sed -n ${num}',/^.$/{; s/^\(.\{18\}\)\(.*\)$/\2/p; /^.$/{; q; }; }' "${in_file}" | tr -d "\015" | cat -n > "${gr}_${gr_i}"
join -t"<->" -o 1.1,1.2,2.2 ${fl_base} ${gr}_${gr_i} | sed 's/<--->//2' > ${i}_tmp
mv ${i}_tmp ${fl_base}
fi
done
sed 's/^[ 0-9]*<------>\(.*\)$/\1/' "${fl_base}" > "${gr}_0"
)
cat [1-9]_0 > "${out_file}"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2011-12-29 15:16:03
Re: Помогите по парсингу
О! Большое спасибо!
Теперь хотя бы вижу в какую сторону смотреть!
Еще раз, большое спасибо!!!
Теперь хотя бы вижу в какую сторону смотреть!
Еще раз, большое спасибо!!!
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2011-12-29 15:16:03
Re: Помогите по парсингу
Подскажите пожалуйста.
Как мне извлечь две строки из файла по наименованию поля "1-й филиал", например,
Заранее спасибо.
Как мне извлечь две строки из файла по наименованию поля "1-й филиал", например,
Код: Выделить всё
----------------------------------------------
1-й филиал пред.: 100: 112: 50:
текущ: 150: 111: 53:
----------------------------------------------
а затем соединить ее с другой строкой с таким же названием, но убрать второе вхождение названия и убрать "пред.", "текущ", чтобы получилась одна строка
-------------------------------------------------------
1-й филиал пред.: 100: 112: 50: 1: 10: 13:
текущ: 150: 111: 53: 3: 11: 15:
-------------------------------------------------------
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите по парсингу
Скрипт выше соединяет все строки филиалов.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.