Страница 1 из 1
непонятки с sed и переменными
Добавлено: 2009-07-03 14:49:11
schizoid
Код: Выделить всё
# new="Модулi пам'ятi";k="`echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"`"; echo "$k"
Модулi пам'ятi
# new="Модулi пам'ятi";echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"
Модулi пам\'ятi
в чем прикол?
Re: непонятки с sed и переменными
Добавлено: 2009-07-03 16:08:43
Гость
schizoid писал(а):Код: Выделить всё
# new="Модулi пам'ятi";k="`echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"`"; echo "$k"
Мало! Ставь 5 (пять) бэкслэшев или используй $(...) вместо `...`.
Код: Выделить всё
$ echo `echo '\\'`
\
$ echo $(echo '\\')
\\
Re: непонятки с sed и переменными
Добавлено: 2009-07-03 17:11:00
schizoid
точняк. снкс
Re: непонятки с sed и переменными
Добавлено: 2009-07-03 17:53:30
schizoid
продолжу тут, что б не создавать новую тему
есть скрипт:
Код: Выделить всё
i=0
code=''
descr=''
cat descr.temp |
while read k1 k2;
do
i=`expr $i + 1`
w="$k2"
new="$(echo $w | sed 's/[ \t]*$//'| sed "s/'/\\\'/g")"
chet=`expr $i % 2`
# 0 - четное; 1 - нечетное
if [ $chet -eq 1 ];
then
code=$new
else
descr=$new
echo "insert into zakaz.sc33 (code,descr) value ('$code','$descr');" >> descr.sql
fi
done
который из файла вида:
Код: Выделить всё
CODE: 101
DESCR: Мишка А4-tech SWOP-3, blue, optical, PS/2
CODE: 10015
DESCR: ZIP Drive 100Mb NEC, int. IDE
CODE: 1002
DESCR: Принтери
CODE: 10026
DESCR: Картридж EPSON St Color 680 black(double)
CODE: 10028
DESCR: HDD RACK UWSCSI
CODE: 1003
DESCR: Пристрої безперебiйного живлення
формирует файл вида:
Код: Выделить всё
insert into zakaz.sc33 (code,descr) value ('101','Мишка А4-tech SWOP-3, blue, optical, PS/2');
insert into zakaz.sc33 (code,descr) value ('10015','ZIP Drive 100Mb NEC, int. IDE');
insert into zakaz.sc33 (code,descr) value ('1002','Принтери');
insert into zakaz.sc33 (code,descr) value ('10026','Картридж EPSON St Color 680 black(double)');
insert into zakaz.sc33 (code,descr) value ('10028','HDD RACK UWSCSI');
insert into zakaz.sc33 (code,descr) value ('1003','Пристрої безперебiйного живлення');
insert into zakaz.sc33 (code,descr) value ('1004','Факси');
insert into zakaz.sc33 (code,descr) value ('10049','HP Color LaserJet CM1015, A4, принтер/сканер/копир, 8/3 чб./цв., 600dpi, USB 2.0');
insert into zakaz.sc33 (code,descr) value ('1005','Телефони беспроводные Panasonic');
insert into zakaz.sc33 (code,descr) value ('1006','Копіри');
insert into zakaz.sc33 (code,descr) value ('1007','Корпуси');
insert into zakaz.sc33 (code,descr) value ('1008','Монiтори');
но т.к. в исходном файле порядка 175000 строк, этот скрипт отрабатывает очень долго. как можно его оптимизировать? или придется писать на другом языке программирования?
Re: непонятки с sed и переменными
Добавлено: 2009-07-03 19:56:19
zg
schizoid писал(а):как можно его оптимизировать?
гм... да чё тут оптимизировать то?! сделай замены седом
Код: Выделить всё
zg# ./1.sh
INSERT INTO zakaz.sc33 set code='101',
value='Мишка А4-tech SWOP-3, blue, optical, PS/2';
INSERT INTO zakaz.sc33 set code='10015',
value='ZIP Drive 100Mb NEC, int. IDE';
INSERT INTO zakaz.sc33 set code='1002',
value='Принтери';
INSERT INTO zakaz.sc33 set code='10026',
value='Картридж EPSON St Color 680 black(double)';
INSERT INTO zakaz.sc33 set code='10028',
value='HDD RACK UWSCSI';
INSERT INTO zakaz.sc33 set code='1003',
value='Пристрої безперебiйного живлення';
zg# cat 1.sh
#!/bin/sh
sed -E \
-e "s/CODE: (.*)/INSERT INTO zakaz.sc33 set code='\1',/" \
-e "s/DESCR: (.*)/value='\1';/" \
1.txt
zg# cat 1.txt
CODE: 101
DESCR: Мишка А4-tech SWOP-3, blue, optical, PS/2
CODE: 10015
DESCR: ZIP Drive 100Mb NEC, int. IDE
CODE: 1002
DESCR: Принтери
CODE: 10026
DESCR: Картридж EPSON St Color 680 black(double)
CODE: 10028
DESCR: HDD RACK UWSCSI
CODE: 1003
DESCR: Пристрої безперебiйного живлення
zg#
Re: непонятки с sed и переменными
Добавлено: 2009-07-03 23:23:04
schizoid
да, так на много быстрее, но еще все таки нужно применить то, что я делал, обрезка пустого справа, и замена ' -> \' (иначе муксль не втягивает), и еще нуно в одну строку запрос (ну или перенос вставить), а то тоже мускль не хавает.
нуно про sed пойти почитать. рульная вещь
Re: непонятки с sed и переменными
Добавлено: 2009-07-04 6:12:53
zg
schizoid писал(а):еще нуно в одну строку запрос (ну или перенос вставить), а то тоже мускль не хавает.
гм... мускуль игнорирует пробелы, это пофигу
Код: Выделить всё
zg# cat | mysql mysql
select
user from
user
limit
1
;
user
root
zg#
с кавычками сложнее, но тут на самом деле не всё так страшно

просто добавляешь ещё одно правило замены в начало комманд и всё.
Код: Выделить всё
zg# ./1.sh
INSERT INTO test.sc33 set code='101',
value='Мишка \'А4-tech\' SWOP-3, blue, optical, PS/2';
INSERT INTO test.sc33 set code='10015',
value='ZIP Drive 100Mb NEC, int. IDE';
INSERT INTO test.sc33 set code='1002',
value='Принтери';
INSERT INTO test.sc33 set code='10026',
value='Картридж \'EPSON\' St Color 680 black(double)';
INSERT INTO test.sc33 set code='10028',
value='HDD RACK UWSCSI';
INSERT INTO test.sc33 set code='1003',
value='Пристрої безперебiйного живлення';
zg# ./1.sh | mysql test
zg# mysql -be 'select * from test.sc33;'
+-------+----------------------------------------------+
| code | value |
+-------+----------------------------------------------+
| 101 | Мишка 'А4-tech' SWOP-3, blue, optical, PS/2 |
| 10015 | ZIP Drive 100Mb NEC, int. IDE |
| 1002 | Принтери |
| 10026 | Картридж 'EPSON' St Color 680 black(double) |
| 10028 | HDD RACK UWSCSI |
| 1003 | Пристрої безперебiйного живлення |
+-------+----------------------------------------------+
zg# cat 1.sh
#!/bin/sh
sed -E \
-e "s/'/\\\\'/g" \
-e "s/CODE: (.*)/INSERT INTO test.sc33 set code='\1',/" \
-e "s/DESCR: (.*)/value='\1';/" \
1.txt
zg#
Re: непонятки с sed и переменными
Добавлено: 2009-07-05 17:26:23
schizoid
плин. клевота. завтра на работе попробую . сеньки

Re: непонятки с sed и переменными
Добавлено: 2009-07-06 12:42:27
schizoid
все гут. дец еще доработал и внедрил
