LINUX.ORG.RU

sed vs awk


0

0

Как вы считаете, что лучше использовать - sed или awk? Чему вы отдаете предпочтение? Мне кажется, что у awk больше возможностей, но sed имеет лучшую поддержку регулярных выражений. Часто трудно выбрать между sed или awk, хотя разница в результатах существенная. Хотелось бы услышать аргументы за или против sed и awk.

anonymous

>Часто трудно выбрать между sed или awk, хотя разница в результатах существенная.

В полученных результатх разница или в скорости работы?

Если в полученных результатах, то предпочтение стоит уделить инструменту, выдавшим правильные результаты :)

UserUnknown ★★★★★
()
Ответ на: комментарий от UserUnknown

Разница в качестве и скорости разработки. Какой инструмент и в каком случае вы выбираете? У awk более строгий синтаксис, но sed позволяет быстрее написать и сдать проект заказчику. Но при использовании sed также много и ошибок, увы. В каком случае и что вы предпочитаете?

anonymous
()
Ответ на: комментарий от UserUnknown

Под результатом я вообще подразумевал программу. Для меня это является результатом, так как я пишу программы на sed и awk по заказам.

anonymous
()

Использую тот инструмент, который лучше (программа проще и прозрачнее) подходит для данной цели. Быстродействие у них несущественно отличается.

sdio ★★★★★
()
Ответ на: комментарий от sdio

Вот именно о том, что лучше я и спрашиваю. Как вы оцениваете, какой инструмент подходит лучше?

anonymous
()

мне awk больше нравится -- он банально проще -- понятные C-like выражения vs. криптичность седа.

Ну и мощность awk конечно не знает границ..

dilmah ★★★★★
()
Ответ на: комментарий от UserUnknown

Я спрашиваю именно по каким критериям вы оцениваете, какой инструмент выбрать.

А на счет на чем лучше поехать - на том, что есть. Машина то обычно одна. А sed и awk - уже два инструмента. Надо делать выбор между ними.

anonymous
()
Ответ на: комментарий от dilmah

Да, но часто получается так, что нужно и считать(с чем лучше справляется awk) и парсить отчет(с чем лучше справляется sed) одновременно. Что вы используете в таком случае?

anonymous
()
Ответ на: комментарий от anonymous

В Америку тоже на машине поедешь?

Сам использую и то и другое. Зачем чем-то ограничиваться, если оба инструмента есть даже на уровне busybox?

UserUnknown ★★★★★
()
Ответ на: комментарий от UserUnknown

В Америку вообще на самолете.

Проблема в том, что заказ часто требуется выполнить на одном языке, но возможно выбрать либо sed, либо awk. Вы когда-нибудь занимались программированием на sed/awk на заказ?

А busybox - не такой уж и низкий уровень. Просто скомпилированно в кучу много программ, но часто на sed и awk одновременно банально не хватает места на карманном устройстве(или вообще наручных часах с NetBSD). Поэтому и приходится выбирать что-то одно.

Сказать, что это есть _даже_ на уровне busybox - все равно что сказать - _даже_ на уровне ядра. И там и там много чего есть.

anonymous
()
Ответ на: комментарий от anonymous

> Проблема в том, что заказ часто требуется выполнить на одном языке, но возможно выбрать либо sed, либо awk. Вы когда-нибудь занимались программированием на sed/awk на заказ?

мне доводилось писать только на _шелле_ -- то есть я мог свободно комбинировать и sed и awk. Седом я делал только простейшие замены. awk скрипты же доходили до десятков строк. Но тот же awk часто нужно комбинировать с sort и т.п.

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

> А вы никогда не писали на sed скрипты хотя бы строк в 20?

я не знаю сед -- он слишком криптический.

Даже если написать такой скрипт -- как и кто его сможет прочитать и понять?

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>Даже если написать такой скрипт -- как и кто его сможет прочитать и понять?

Я, например.

anonymous
()

Извините конечно, что вмешиваюсь, а чем perl не угодил?

Legioner ★★★★★
()

sed/awk - это какой-то очень странный выбор. sed/perl - это ещё понятно, есть пограничные задачи. Но awk-то зачем?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

> sed/awk - это какой-то очень странный выбор. sed/perl - это ещё понятно, есть пограничные задачи. Но awk-то зачем?

минимализм. awk это стандарт. awk есть в базовой системе. perl это монстр.

dilmah ★★★★★
()
Ответ на: комментарий от Miguel

А в чем разница между скриптом и программой? Что отличает первое от второго? Есть какое-нибудь определение?

Бывают большие скрипты и двухстрочные программы. Почему Perl - скрипты, а Python - программы.

Или это устоявшиеся лексемы?

anonymous
()
Ответ на: комментарий от anonymous

> А в чем разница между скриптом и программой? Что отличает первое от второго? Есть какое-нибудь определение?

> Бывают большие скрипты и двухстрочные программы. Почему Perl - скрипты, а Python - программы.

> Или это устоявшиеся лексемы?

Что с тобой?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

>Что с тобой?

Это не я. Это другой анонимус.

anonymous
()
Ответ на: комментарий от anonymous

> Почему Perl - скрипты, а Python - программы

кто тебе это сказал?

pba
()

хм, предпочитаю использовать чистый sh(1) или чистый sed(1) или чистый awk(1).

У sed'а нравится hold space, короткие имена у функций, хорошая
поддержка regexp'ов и значительный выигрыш в скорости по ним у awk.

У awk'а нравится поддержка rand() и split(), а также встроенный printf().

У sh'а нравится большое кол-во встроенных команд и возможность
не только манипулировать строками.

awk не нравится так же как perl, ибо жирное гавно:
> \ls -fl `which sh sed awk`
-r-xr-xr-x  1 root  wheel  111616 May 15 10:07 /bin/sh
-r-xr-xr-x  1 root  wheel   31476 May 15 10:09 /usr/bin/sed
-r-xr-xr-x  2 root  wheel  123464 May 15 10:09 /usr/bin/awk
(это на freebsd-8-current)

> cat >someFile
blablablabla
here comes табуляция	and 百shota!
blah       multiple        spaces    blaaaah

### begin test.sh
# simple substitute example
sub() {
    foo=$1 bar=$2
    IFS="" # prevent sh(1) from truncating whitespaces
    while read line; do
	case $line in
	    *$foo*) echo ${line%%$foo*}$bar${line##*$foo} ;;
	    *)      echo $line
	esac
    done
}

sub <someFile shota loli
sed <someFile s/shota/loli/
awk <someFile '{ sub("shota","loli"); print }'
### end test.sh

> sh test.sh
blablablabla
here comes табуляция	and 百loli!
blah       multiple        spaces    blaaaah
blablablabla
here comes табуляция	and 百loli!
blah       multiple        spaces    blaaaah
blablablabla
here comes табуляция	and 百loli!
blah       multiple        spaces    blaaaah

anonymous
()
Ответ на: комментарий от anonymous

> sub("shota","loli")

oops, двойные кавычки не обязательны. ;)

anonymous
()
Ответ на: комментарий от anonymous

Извиняюсь перед автором топика про тупой вопрос на счет скриптов-програм. Просто не понятно лексическое значение. Определение.

anonymous
()
Ответ на: комментарий от anonymous

>Вы когда-нибудь занимались программированием на sed/awk на заказ?

Нет, но не отказался бы попробовать ;-)

P.S. Что прям так много людей кому это нужно постоянно?! Удивлен.

php-coder ★★★★★
()
Ответ на: комментарий от dilmah

>минимализм. awk это стандарт. awk есть в базовой системе. perl это монстр.

Perl может и монстр, зато написанная на нём программа везде работает корректно. А на sed (и, наверное, на awk) можно написАть то, что не будет работать на другой (обычно не GNU) системе. Я понимаю, что нужно писАть переносимо и портабельно, но в итоге часто получается некрасиво или долго работает. IMHO.

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

>Нет, но не отказался бы попробовать ;-)

О, это будет уёбищная программа! ухандохает всё содержимое компа -- спасиба не нада)))

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.