Каковы различия между Perl, Python, AWK и sed? [закрытый]


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

Edit: это не "против", как тема, просто информация.

5   231   2008-12-15 00:00:04

5 ответов:

в порядке появления, языки sed,awk,perl,python.

The sed программа является редактором потока и предназначена для применения действий из сценария к каждой строке (или, более широко, к указанным диапазонам строк) входного файла или файлов. Его язык основан на ed, редактор Unix, и хотя он имеет условные обозначения и так далее, с ним трудно работать для сложных задач. Вы можете творить с ним небольшие чудеса-но за счет волосы на голове. Тем не менее, это, вероятно, самый быстрый из программ при попытке выполнения задач в рамках своей компетенции. (Он имеет наименее мощные регулярные выражения обсуждаемых программ - адекватные для многих целей, но, конечно, не PCRE - Perl-совместимые регулярные выражения)

The awk программа (название от инициалов ее авторов-Aho, Weinberger и Kernighan) - это инструмент, изначально предназначенный для форматирования отчетов. Он может быть использован в качестве супа sed; в его более поздних версии, это вычислительно завершена. Он использует интересную идею - программа основана на модели соответствуют и действия при срабатывании шаблона'. Шаблоны довольно мощные (расширенные регулярные выражения). Язык для действий похож на C. Одна из ключевых особенностей awk заключается в том, что он автоматически разбивает входные строки на поля.

Perl был написан частично как awk-killer и sed-killer. Двух программ с ней a2p и s2p для преобразования awk скрипты и sed скрипты в Perl. Perl является одним из самых ранних языков сценариев следующего поколения (Tcl/Tk, вероятно, может претендовать на первенство). Он имеет мощную интегрированную обработку регулярных выражений с гораздо более мощным языком. Он обеспечивает доступ практически ко всем системным вызовам и имеет расширяемость модулей CPAN. (Ни то ни другое awk, ни sed является расширяемым.) Один из девизов Perl - " TMTOWTDI-есть более чем один способ чтобы сделать это "(произносится как"Тим-подхалим"). Perl имеет "объекты", но это скорее дополнение, чем фундаментальная часть языка.

Python был написан последним, и, вероятно, частично как реакция на Perl. Он имеет некоторые интересные синтаксические идеи (отступы для обозначения уровней - без скобок или эквивалентов). Он более фундаментально объектно-ориентирован, чем Perl; он так же расширяем, как Perl.

OK-когда использовать каждый?

  • sed-когда вам нужно сделать простой текст преобразуется в файлы.
  • awk-когда вам нужно только простое форматирование и суммирование или преобразование данных.
  • perl-практически для любой задачи, но особенно когда задача требует сложных регулярных выражений.
  • python-для тех же задач, для которых вы могли бы использовать Perl.

я не знаю ничего, что Perl может сделать, что Python не может, и наоборот. Выбор между ними будет зависеть от других факторов. Я выучил Perl до того, как появился питон, поэтому я склонен его использовать. Python имеет менее аккретированный синтаксис и, как правило, несколько проще в освоении. Perl 6, когда он станет доступен, будет увлекательным развитием.

(обратите внимание, что "обзоры" Perl и Python, в частности, являются прискорбно неполными; целые книги могут быть написаны по этой теме.)

освоив несколько десятков языков, вы устаете от таких людей, как С. Лотт (см. Его спорный ответ на этот вопрос, почти вдвое меньше голосов вниз, чем вверх (+45/-22) через шесть лет после ответа).

Sed является лучшим инструментом для чрезвычайно простых конвейеров командной строки. В руках мастера sed он подходит для одноразовых операций произвольной сложности, но он не должен использоваться в производственном коде, за исключением очень простых конвейеров замены. Такие вещи, как 's / это/то/.-

Gawk (GNU awk) на сегодняшний день является лучшим выбором для сложного переформатирования данных, когда есть только один источник входного сигнала и один выход (или несколько выходов, последовательно записанных). Так как большая часть реальной работы соответствует этому описанию, и хороший программист может изучить gawk за два часа, это лучший выбор. На этой планете проще и быстрее лучше!

Perl или Python намного лучше, чем любая версия awk или sed, когда у вас есть очень сложные сценарии ввода / вывода. Чем сложнее проблема, тем лучше вы используете python, с точки зрения обслуживания и читаемости. Обратите внимание, однако, что хороший программист может писать читаемый код на любом языке, а плохой программист может писать недостижимую чушь на любом полезном языке, поэтому выбор perl или python можно смело оставить на усмотрение программиста, если указанный программист квалифицирован и умен.

во-первых, есть две несвязанные вещи в списке "Perl, Python awk и sed".

вещь 1-упрощенные инструменты обработки текста.

  • sed. Он имеет фиксированный, относительно простой объем работы, определяемый идеей чтения и изучения каждой строки файла. sed не предназначен для того, чтобы быть особенно читаемым. Он разработан, чтобы быть очень маленьким и очень эффективным на очень маленьких серверах unix.

  • awk. Он имеет немного меньше фиксированный, менее простой объем работы. Однако основной цикл программы awk определяется неявным чтением строк исходного файла.

это не "полные" языки программирования. Хотя вы можете-с некоторой работой-писать довольно сложные программы в awk, он быстро становится сложным и трудным для чтения.

Вещь 2-языки программирования общего назначения. Они имеют богатое разнообразие типов операторов, многочисленные встроенные данные структуры, и никаких встроенных предположений или ярлыков, о которых можно говорить.

  • Perl.

  • Python.

когда их использовать.

  • sed. Никогда. Это действительно не имеет значения в современную эпоху компьютеров с более чем 32 Кбайта памяти. Perl или Python делают то же самое более четко.

  • awk. Никогда. Как и sed, он отражает более раннюю эру вычислений. Скорее чем поддерживать этот язык (в дополнение ко всем другим, необходимым для успешной системы), приятнее просто делать все на одном приятном языке.

  • Perl. Любая проблема программирования любого рода. Если вам нравится свободно мыслящий синтаксис, где есть много, много способов сделать то же самое, perl-это весело.

  • Python. Любая проблема программирования любого рода. Если вам нравится довольно ограниченный синтаксис, где меньше вариантов, меньше тонкость, и (возможно) больше ясности. Объектно-ориентированный характер Python делает его более подходящим для больших, сложных задач.

Background -- я не бью sed и awk из-за невежества. Я научился awk более 20 лет назад. Делал много вещей с ним; использовал, чтобы научить его как основной навык unix. Я выучил Perl около 15 лет назад. Многие сложные вещи. Я оставил обоих позади потому что я могу делать то же самое в Python, и это проще и больше четкий.

есть две серьезные проблемы с sed и awk, ни одна из которых не является их возрастом.

  1. неполнота их реализации. Все, что делают sed и awk, можно сделать на Python или Perl, часто более просто, а иногда и быстрее. Оболочка конвейера имеет некоторые преимущества производительности из-за его мульти-обработки. Python предлагает subprocess модуль, чтобы позволить мне восстановить эти преимущества.

  2. необходимость учиться еще другой язык. Делая что-то в Python (или Perl), ваша реализация зависит от меньшего количества языков, что приводит к увеличению ясности.

Я бы не назвал sed полноценным языком программирования, это потоковый редактор с языковыми конструкциями, направленными на программное Редактирование текстовых файлов.

Awk-это немного более универсальный язык, но он по-прежнему лучше всего подходит для обработки текста.

Perl и Python-это полноценные языки программирования общего назначения. Perl имеет свои корни в обработке текста и имеет ряд awk-подобных конструкций (есть даже скрипт awk-to-perl с плавающей точкой вокруг в сети). Есть много различий между Perl и Python, ваш лучший выбор, вероятно, прочитать резюме обоих языков на что-то вроде Википедии, чтобы получить хорошее представление о том, что они есть.

когда их использовать: awk-never-S. Lott.

Я думаю, что С. Лотт немного промахнулся с этой рекомендацией. Дело в том, что в Linux и других средах UNIX awk является полезным инструментом для использования с bash, sh и ksh для быстрой обработки текста. Идея самого скрипта заключается в том, что вы решаете свою проблему, склеивая этот инструмент, этот инструмент. Следовательно, в сценариях администратора обычно используется ls, grep,/, awk, time, ps и т. д. Каждый из них является инструментом, который скриптер сочетает в себе как строитель по кирпичику достраивает здание (чтобы решить проблему под рукой).

например, я являюсь членом команды, управляющей командой принадлежности для пейнтбола доткомов. Этот сайт электронной коммерции основан на стеке ламп. Для автоматизированной обработки и нормализации потоков данных от различных поставщиков в серверную базу данных мы используем и поддерживаем разнообразный набор скриптов, включая bash, perl, php и даже expect. Каждый из них имеет свои сильные стороны, основываясь на имеющихся модули и API. В сценариях bash мы выполняем быстрое сопоставление шаблонов и соответствующие действия над шаблонами по мере необходимости с помощью awk без необходимости переключения на PERL. Одна вещь, которую я также хотел бы отметить, которая не была подчеркнута в потоке, заключается в том, что достаточное количество этих сценариев было куплено или получено из открытого исходного кода. Если скрипт пришел как Perl, мы поддерживаем его как Perl; если скрипт пришел как Php, мы поддерживаем его как Php; если он пришел как bash, мы поддерживаем его как bash; мы не делаем перепишите его на другом языке только потому, что мы считаем, что он менее эффективен на языке оригинала.