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

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

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

5 ответов


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

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

на awk программа (название от инициалов ее авторов-Aho, Weinberger и Kernighan) - это инструмент, изначально предназначенный для форматирования отчетов. Его можно использовать как souped up 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, поэтому я склонен использовать его. Python имеет менее аккретированный синтаксис и, как правило, несколько проще в освоении. Perl 6, когда он станет доступен,будет увлекательным развитием.

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


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

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

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

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


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

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

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

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

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

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

  • Perl.

  • Python.

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

  • sed. Никогда. Он действительно не имеет никакой ценности в современную эпоху компьютеров с более чем 32K памяти. 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 и т. д. Каждый из них является инструментом, который scripter сочетает в себе как строитель кирпич за кирпичом достраивает здание (чтобы решить проблему под рукой).

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