Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
Alex Keda
- стреляли...
- Сообщения: 35481
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2009-01-05 19:08:33
сабж.
надо разобрать файл содержащий секции типа:
Код: Выделить всё
Account "h1526" {
Owner root
Domain xxx.ru
Ip 78.x.x.122
Preset ID50
SSL off
PHP fcgi
CGI on
SSI off
DiskLimit 0
UserLimit 0
CPULimit 10
MemLimit 16
ProcLimit 3
FtpLimit 1
MailLimit 1
DomainLimit 1
WebDomainLimit 1
MailDomainLimit 1
DatabaseLimit 1
DatabaseUserLimit 1
BandwidthLimit 10000
BandwidthUsage 0
}
В идеале, конечно в переменные, практически - хотя бы подробить на отдельные файлы по имени юзера (в примере - h1526) - дальше мона грепом выдернуть нужную строку...
пока додумался тока до
а вот дальше - идеи пропали... сделал всё в одну строку - а как побить на куски - даж не знаю =((
Убей их всех! Бог потом рассортирует...
Alex Keda
-
Хостинг 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/
-
hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Непрочитанное сообщение
hizel » 2009-01-05 19:33:19
да воспользуйся чем нибудь более высокоуровневым, например php

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
hizel
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-01-05 19:43:36
Код: Выделить всё
zg# cat 1.awk
#!/usr/bin/awk -f
{
if ( $1== "Account" && $3== "{" )
{
section = $2
gsub(/"/, "", $2);
toFile = $2;
print "Output " section " section to file " toFile;
}
if ( toFile ) print $0 > toFile;
if ( $1 == "}" ) toFile = null;
}
zg#
Код: Выделить всё
zg# ./1.awk 1.txt
Output "h1526" section to file h1526
Output "h1523" section to file h1523
zg#
Код: Выделить всё
zg# cat h1523
Account h1523 {
Owner root
Domain xxx.ru
Ip 78.x.x.122
Preset ID50
SSL off
PHP fcgi
CGI on
SSI off
DiskLimit 0
UserLimit 0
CPULimit 10
MemLimit 16
ProcLimit 3
FtpLimit 1
MailLimit 1
DomainLimit 1
WebDomainLimit 1
MailDomainLimit 1
DatabaseLimit 1
DatabaseUserLimit 1
BandwidthLimit 10000
BandwidthUsage 0
}
zg#
zg
-
Alex Keda
- стреляли...
- Сообщения: 35481
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2009-01-05 20:37:51
бага какая-то
Код: Выделить всё
srv# ./test.awk /usr/local/ispmgr/etc/ispmgr.conf ~
Output "host-foodru" section to file host-foodru
Output "h1003" section to file h1003
Output "h1004" section to file h1004
Output "h1009" section to file h1009
Output "h1018" section to file h1018
Output "h1028" section to file h1028
Output "dspam" section to file dspam
Output "h1081" section to file h1081
Output "h1082" section to file h1082
Output "h1092" section to file h1092
Output "h1103" section to file h1103
Output "h1117" section to file h1117
Output "h1126" section to file h1126
Output "h1129" section to file h1129
Output "h1130" section to file h1130
Output "h1135" section to file h1135
Output "h1114" section to file h1114
Output "h1138" section to file h1138
/usr/bin/awk: h1138 makes too many open files
input record number 705, file /usr/local/ispmgr/etc/ispmgr.conf
source line number 10
Код: Выделить всё
srv# ll | grep h1 ~
-rw-r--r-- 1 root wheel - 336B 5 янв 20:32 h1003
-rw-r--r-- 1 root wheel - 345B 5 янв 20:32 h1004
-rw-r--r-- 1 root wheel - 340B 5 янв 20:32 h1009
-rw-r--r-- 1 root wheel - 426B 5 янв 20:32 h1018
-rw-r--r-- 1 root wheel - 335B 5 янв 20:32 h1028
-rw-r--r-- 1 root wheel - 339B 5 янв 20:32 h1081
-rw-r--r-- 1 root wheel - 423B 5 янв 20:32 h1082
-rw-r--r-- 1 root wheel - 342B 5 янв 20:32 h1092
-rw-r--r-- 1 root wheel - 335B 5 янв 20:32 h1103
-rw-r--r-- 1 root wheel - 340B 5 янв 20:32 h1114
-rw-r--r-- 1 root wheel - 336B 5 янв 20:32 h1117
-rw-r--r-- 1 root wheel - 337B 5 янв 20:32 h1126
-rw-r--r-- 1 root wheel - 340B 5 янв 20:32 h1129
-rw-r--r-- 1 root wheel - 342B 5 янв 20:32 h1130
-rw-r--r-- 1 root wheel - 336B 5 янв 20:32 h1135
srv#
Убей их всех! Бог потом рассортирует...
Alex Keda
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-01-05 20:52:08
Код: Выделить всё
#!/usr/bin/awk -f
{
if ( $1== "Account" && $3== "{" )
{
if ( toFile ) close(toFile);
toFile = $2;
gsub(/"/, "", toFile);
print "Output " $2 " section to file " toFile;
}
if ( toFile ) print $0 > toFile;
if ( $1 == "}" )
{
if ( toFile ) close(toFile);
toFile = 0;
}
}
?
zg
-
Alex Keda
- стреляли...
- Сообщения: 35481
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2009-01-05 20:54:14
it's work!
thanks!
Убей их всех! Бог потом рассортирует...
Alex Keda
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2009-01-05 21:28:21
lissyara писал(а):в переменные
ась?
Код: Выделить всё
#! /bin/sh
parse() {
while read par val; do
case $val in
*{*)
val=${val%\"*}
val=${val#\"}
root=$par
tree=${root}_$val
# cons=${root}_$tree
roots="$roots $root"
eval ${root}_trees=\"\$${root}_trees $tree\"
while read par val; do
case $par in
*}*) break
esac
branch=$par
leaf=$val
eval ${tree}_branches=\"\$${tree}_branches $branch\"
eval ${tree}_$branch=$leaf
done
esac
done
}
for arg; {
parse < $arg
}
echo roots=$roots
# show trees on root `Account'
echo Account_trees=$Account_trees
# show branches on tree `Account_h1526'
echo Account_h1526_branches=$Account_h1526_branches
# show leaf value on branch `Account_h1526_CGI'
echo Account_h1526_CGI=$Account_h1526_CGI
# test
echo Account_h1526_Owner=$Account_h1526_Owner
echo Account_dummy_Owner=$Account_dummy_Owner
Код: Выделить всё
(~). foo.sh data
roots= Account Account
Account_trees= Account_h1526 Account_dummy
Account_h1526_branches= Owner Domain Ip Preset SSL PHP CGI SSI DiskLimit UserLimit CPULimit MemLimit ProcLimit FtpLimit MailLimit DomainLimit WebDomainLimit MailDomainLimit DatabaseLimit DatabaseUserLimit BandwidthLimit BandwidthUsage
Account_h1526_CGI=on
Account_h1526_Owner=root
Account_dummy_Owner=luser
Гость
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2009-01-05 21:30:47
Гость писал(а):roots= Account Account
упс, забыл засунуть алгоритм от дубликатов. Но я думаю сам разберешься как его сделать.
ps, awk в топку ;)
Гость
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-01-05 21:33:20
Гость писал(а):ps, awk в топку

ну да, на еволах лучше -))))
zg