Программирование на 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;
ruslanstep1
-
Хостинг HostFood.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
Непрочитанное сообщение
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 выделяй поля и проставляй "
;"
rmn
-
rmn
- старшина
- Сообщения: 427
- Зарегистрирован: 2008-10-03 18:52:02
Непрочитанное сообщение
rmn » 2011-07-21 10:24:25
ruslanstep1 писал(а):что именно он должен делать
Объединяет строку с датой и следующую за ней в одну
rmn
-
rmn
- старшина
- Сообщения: 427
- Зарегистрирован: 2008-10-03 18:52:02
Непрочитанное сообщение
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.
...
rmn
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
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
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
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
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp