Помогите с sed

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Помогите с sed

Сообщение drBatty »

smaharbA писал(а):
20.01.2010 11:42
о чем и речь, такая конструкция более распространена при обработке строк, это и надо бы замерить

вот вы и замерьте. тогда поймёте, почему я вообще не мерил башевские конструкции - с моими наборами файлов это недели работы ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Помогите с sed

Сообщение diesel »

drBatty писал(а):
19.01.2010 10:52
К вопросу о результатах: да, на таких примитивных примерах sed проигрывает. А что вы хотите? она ищет RE, а не просто символ. И ещё просматривает всю строку.

ну я как бы подводил к мысли о том что для работы с файлами у которых есть некоторая разбивка на поля, с заданным разделителем, удобно, и как оказывается немного быстрее, использовать программы которые как раз таки умеют работать с файлами разбитыми на поля, а не матчать для этого регекспы. в конце-концов иногда нужно, например, выделить поле, потом проверить его на соответствие какому-нибудь условию, в случае соответствия сделать что-то одно, в случае несоответствия что-то другое. Подозреваю, что в том же sed'е это сделать можно, но синтаксически проще это написать в awk, и возможно получится быстрее.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Помогите с sed

Сообщение drBatty »

diesel писал(а):
20.01.2010 12:23
ну я как бы подводил к мысли о том что для работы с файлами у которых есть некоторая разбивка на поля, с заданным разделителем, удобно, и как оказывается немного быстрее, использовать программы которые как раз таки умеют работать с файлами разбитыми на поля, а не матчать для этого регекспы. в конце-концов иногда нужно, например, выделить поле, потом проверить его на соответствие какому-нибудь условию, в случае соответствия сделать что-то одно, в случае несоответствия что-то другое. Подозреваю, что в том же sed'е это сделать можно, но синтаксически проще это написать в awk, и возможно получится быстрее.

можно и на sed'е
только это жутковато выглядит, сравните: Как грохнуть процессы по маске? (=
:)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Помогите с sed

Сообщение t.t »

drBatty писал(а):
18.01.2010 14:59
cut нужна ещё и grep, которая работает примерно как sed (по скорости)
Это как раз вопрос. Я не спорю, что cut только для простых случаев, но в простых случаях ему grep не нужен, и скорость будет существенно повыше, чем у sed. Да и насчёт того, что grep сравним по скорости с sed, я бы тоже так не торопился:

Shell

t:~$ for i in $(seq 10000); do cat /etc/passwd /etc/apt/preferences >>tmp/test; done t:~$ wc -l tmp/test 650000 tmp/test t:~$ time (grep : tmp/test | cut -d : -f 2- >/dev/null) real 0m1.077s user 0m0.960s sys 0m0.084s t:~$ time sed 's/:.*//' <tmp/test >/dev/null real 0m6.770s user 0m6.664s sys 0m0.036s t:~$ time sed '/^[^:]*$/ d; s/:.*//' <tmp/test >/dev/null real 0m10.028s user 0m9.937s sys 0m0.024s t:~$ time cut -sd : -f 2 <tmp/test >/dev/null real 0m0.394s user 0m0.364s sys 0m0.016s


Что касается сравнения по скорости непосредственно grep и sed:

Shell

t:~$ time sed '/^[^:]*$/ d' <tmp/test >/dev/null real 0m6.887s user 0m6.732s sys 0m0.040s t:~$ time sed -n '/:/ p' <tmp/test >/dev/null real 0m4.212s user 0m4.100s sys 0m0.020s t:~$ time grep : <tmp/test >/dev/null real 0m0.403s user 0m0.380s sys 0m0.004s


Как вилите, разница на порядок.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: