Страница 1 из 1

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

Добавлено: 2011-08-29 9:38:48
dimidrol80
Есть отчет вида

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

             
              Послуга ********** дор          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 вывести следующую строку которая следует за вхождением?

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

Добавлено: 2011-08-29 10:28:57
kpp
Какой разделитель полей?

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

Добавлено: 2011-08-29 10:55:11
kpp
Если разделитель полей - табуляция:

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

awk -F"\t" '!/^Послуга / {gsub(/ /,"",$2); gsub(/ /,"",$4); sum=$2+$4; printf "%.2f\n", sum}' /home/odmin/3.txt

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

Добавлено: 2011-08-29 14:15:35
dimidrol80
Наверно я неправильно описал проблему сам файл состоит из кучи строк

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

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:

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

Добавлено: 2011-08-29 14:25:19
kpp
Нет ничего невозможного ;)

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

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 столбцы, форматируем вывод.