Нужна помащь по парсу файла

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Нужна помащь по парсу файла

Непрочитанное сообщение ruslanstep1 » 2011-07-20 15:16:42

есть фаил на кадировку внутри него не смотрите там вот такое содержимое мне нужна помащь по парсу его

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

DATA
---------------------------------------------------------------------------
TIP				    KOLVO
------------------------------ ----------
07.03.2007
?????????? ???????????		      230

08.03.2007
?????????? ???????????		      230

03.03.2007
?????????? ???????????		      102


DATA
---------------------------------------------------------------------------
TIP				    KOLVO
------------------------------ ----------
06.03.2007
?????????? ???????????		      230

01.03.2007
?????????? ???????????		      102

10.03.2007
?????????? ???????????		      230


DATA
---------------------------------------------------------------------------
TIP				    KOLVO
------------------------------ ----------
04.03.2007
?????????? ???????????		      102

09.03.2007
?????????? ???????????		      230

28.02.2007
?????????? ???????????		       42
вот в такой формат

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

04.03.2007;?????????? ???????????;102;
09.03.2007;?????????? ???????????;230;
28.02.2007;?????????? ???????????;42;

Хостинговая компания 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/

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Нужна помащь по парсу файла

Непрочитанное сообщение rmn » 2011-07-20 20:39:16

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

remcomp% cat script.sh 
#!/bin/sh

rows="`cat file.txt | grep -v ^$ | grep -v DATA | grep -v TIP | grep -v "\-\-" | wc -l`"
rows="`expr $rows \/ 2`"

cat file.txt | grep -v ^$ | grep -v DATA | grep -v TIP | grep -v "\-\-" | rs ${rows} | 
(
        while read line
        do
                echo "$line"
        done
)

remcomp% ./script.sh
07.03.2007   ??????????   ???????????  230
08.03.2007   ??????????   ???????????  230
03.03.2007   ??????????   ???????????  102
06.03.2007   ??????????   ???????????  230
01.03.2007   ??????????   ???????????  102
10.03.2007   ??????????   ???????????  230
04.03.2007   ??????????   ???????????  102
09.03.2007   ??????????   ???????????  230
28.02.2007   ??????????   ???????????  42
а там уже через awk выделяй поля и проставляй ";"

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: Нужна помащь по парсу файла

Непрочитанное сообщение ruslanstep1 » 2011-07-21 8:15:49

спасибо все норма тока ругается вот на это rs ${rows} | что именно он должен делать

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Нужна помащь по парсу файла

Непрочитанное сообщение rmn » 2011-07-21 10:24:25

ruslanstep1 писал(а):что именно он должен делать
Объединяет строку с датой и следующую за ней в одну

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: Нужна помащь по парсу файла

Непрочитанное сообщение ruslanstep1 » 2011-07-22 8:10:20

в моем случае он говорит что такой команды нет

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Нужна помащь по парсу файла

Непрочитанное сообщение rmn » 2011-07-22 12:06:29

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

remcomp% man rs
RS(1)                   FreeBSD General Commands Manual                  RS(1)

NAME
     rs -- reshape a data array

SYNOPSIS
     rs [-[csCS][x] [kKgGw][N] tTeEnyjhHmz] [rows [cols]]

...

HISTORY
     The rs utility first appeared in 4.2BSD.

...

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

Re: Нужна помащь по парсу файла

Непрочитанное сообщение kpp » 2011-07-22 13:14:55

Как по мне, подобная задача логичнее решается через потоковый редактор sed :

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

#!/bin/sh

sed -n '/^[0-3][0-9]\.[0-1][0-9]\.[0-9]\{4\}/{
         N
         / [0-9][0-9]*$/{
          s/\n/;/
          s/[ ][ ]*\([0-9][0-9]*\)$/;\1;/
          p
         }
        }' $1
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

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

Re: Нужна помащь по парсу файла

Непрочитанное сообщение kpp » 2011-07-22 13:38:08

2 rmn
Небольшая придирка или моё ИМХО ;) , но все же, судя по всяческим рекомендациям, и исходя из здравой логики, лучше делать не:

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

cat file.txt | grep -v ^$ | grep -v DATA | grep -v TIP | grep -v "\-\-" | wc -l
, а

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

grep -v ^$ file.txt | grep -v DATA | grep -v TIP | grep -v "\-\-" | wc -l
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: Нужна помащь по парсу файла

Непрочитанное сообщение ruslanstep1 » 2011-07-22 15:13:47

Всем большое спасибо за помощь