Awk или sed вывод строк по номеру строки

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
dimidrol80
рядовой
Сообщения: 38
Зарегистрирован: 2008-06-07 17:50:21
Контактная информация:

Awk или sed вывод строк по номеру строки

Непрочитанное сообщение dimidrol80 » 2011-08-29 9:38:48

Есть отчет вида

Код: Выделить всё

             
              Послуга ********** дор          1 x
              4 год (В)                169  послуга        34 650,00       0,00Грн.         0,00
              Послуга **********              1 x
              АКЦІЯ дит.                13  послуга            13,00       0,00Грн.         0,00
              Послуга ********** дит          1 x
              день (В)                  36  послуга         6 840,00       0,00Грн.         0,00
              Послуга ********** дор          1 x
              "цілий день" (В)          82  послуга        19 680,00       0,00Грн.         0,00
              Послуга ********** дор          1 x
              2 год (В)                123  послуга        22 140,00       0,00Грн.         0,00
              Послуга ********** дит          1 x
              2 год (В)                 76  послуга        11 400,00       0,00Грн.         0,00
              Послуга **********              1 x
              АКЦІЯ дор.                96  послуга            96,00       0,00Грн.         0,00
              Послуга ********** дит          1 x
              4 год (В)                 84  послуга        14 280,00       0,00Грн.         0,00
Нужно сумировать 2 столбец и 4 столбец.
как я понимаю мне сначала перегнать в удобочитаемый вид чтоб awk смог выкусить нужные данные
Пробую так

Код: Выделить всё

sed = /home/odmin/3.txt | sed -n '/Послуга ********/{n;p;}
168
189
191
193
195
197
199
201
203
Без опции -n выводит полностю весь список
Пробовал awk делать тоже не получилось могу вывести номера строк а сами строки не знаю как

Код: Выделить всё

awk '/Послуга *******/ {print NR+1,$0}' /home/odmin/3.txt
Вопрос как awk или sed вывести следующую строку которая следует за вхождением?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Awk или sed вывод строк по номеру строки

Непрочитанное сообщение kpp » 2011-08-29 10:28:57

Какой разделитель полей?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Awk или sed вывод строк по номеру строки

Непрочитанное сообщение kpp » 2011-08-29 10:55:11

Если разделитель полей - табуляция:

Код: Выделить всё

awk -F"\t" '!/^Послуга / {gsub(/ /,"",$2); gsub(/ /,"",$4); sum=$2+$4; printf "%.2f\n", sum}' /home/odmin/3.txt
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

dimidrol80
рядовой
Сообщения: 38
Зарегистрирован: 2008-06-07 17:50:21
Контактная информация:

Re: Awk или sed вывод строк по номеру строки

Непрочитанное сообщение dimidrol80 » 2011-08-29 14:15:35

Наверно я неправильно описал проблему сам файл состоит из кучи строк

Код: Выделить всё

awk ' {print NR}' /home/odmin/3.txt
-skiping-
206 
Разделитель полей пробелы.
При том не работает инвертирование

Код: Выделить всё

awk '!/^Послуга / {print $0}' /home/odmin/3.txt       
 /: Событие не найдено.
Мне нужно прочитать следующую строку после Послуга ********
Тоисть привести вывод awk к такому виду

Код: Выделить всё

2 год (В)                123  послуга        22 140,00       0,00Грн.         0,00
2 год (В)                 76  послуга        11 400,00       0,00Грн.         0,00
АКЦІЯ дор.                96  послуга            96,00       0,00Грн.         0,00
4 год (В)                 84  послуга        14 280,00       0,00Грн.         0,00
Запрашывать по 1 и 4 полю тоже не выход потому что в зависимости от дня недели меняется название
P.S: такой выходной формат дает разработчик ПО и ничего с етим не поделаеш пароль на базу данных ORACLA тоже не дает мотивируя защитой патента :cz2:

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Awk или sed вывод строк по номеру строки

Непрочитанное сообщение kpp » 2011-08-29 14:25:19

Нет ничего невозможного ;)

Код: Выделить всё

sed -n '/^Послуга /n; s/[ ]\{2,\}/<---->/g p;' /home/odmin/3.txt |\
awk -F"\t" '{gsub(/ /,"",$2); gsub(/ /,"",$4); sum=$2+$4; printf "%.2f\n", sum}'
<----> - знак табуляции

Отбираем только строки, идущие за "Послуга ", меняем разделитель полей на табуляцию, суммируем 2 и 4 столбцы, форматируем вывод.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.