просто хочу знати, які основні відмінності між ними? і потужність кожної мови (де її краще використовувати).
Редагувати: це не "проти" як тема, просто інформація.
просто хочу знати, які основні відмінності між ними? і потужність кожної мови (де її краще використовувати).
Редагувати: це не "проти" як тема, просто інформація.
Відповіді:
У порядку появи, ці мови sed
, awk
, perl
, python
.
sed
Програма потоковий редактор і призначена для застосування дій від сценарію до кожного рядка (або, в більш загальному плані , в певні діапазони рядків) вхідний файл або файли. Її мова заснована на ed
редакторі Unix, і хоча він має умовні умови тощо, з цим складно працювати з складними завданнями. З ним можна творити незначні чудеса - але ціною, що стосується волосся на голові. Однак це, мабуть, найшвидший з програм при спробах завдань в межах його компетенції. (У ньому є найменш потужні регулярні вирази обговорюваних програм - адекватні для багатьох цілей, але, звичайно, не PCRE - Perl-Compatible Regular вирази)
awk
Програма (назва від ініціалів її авторів - Ахо, Вайнбергер і Керниган) є інструментом , спочатку для форматування звітів. Його можна використовувати як суп-ап sed
; в останніх версіях він обчислювально завершений. Тут використовується цікава ідея - програма заснована на "узгоджених моделях" та "діях, що вживаються, коли шаблон відповідає". Шаблони досить потужні (Розширені регулярні вирази). Мова для дій схожа на C. Однією з ключових особливостей програми awk
є те, що вона розбиває вхід автоматично на записи, а кожен запис на поля.
Перл був написаний частково як невдаха-убивця та сім-вбивця. Дві програми, що надаються разом з ним, a2p
і s2p
для перетворення awk
сценаріїв і sed
сценаріїв в Perl. Perl - одна з найбільш ранніх мов сценаріїв наступного покоління (Tcl / Tk, можливо, може претендувати на першість). Він має потужну інтегровану обробку регулярних виразів із значно більш потужною мовою. Він забезпечує доступ до майже всіх системних дзвінків і має розширюваність модулів CPAN. (Ні, awk
ні sed
розширюється.) Один із девізів Перла - "TMTOWTDI - Існує більше одного способу зробити це" (вимовляється "тем-тоді"). У Perl є "об'єкти", але це більше доповнення, ніж фундаментальна частина мови.
Пітон був написаний останнім, і, ймовірно, частково як реакція на Perl. У ньому є кілька цікавих синтаксичних ідей (відступ для позначення рівнів - немає дужок або еквівалентів). Він більш принципово об'єктно-орієнтований, ніж Perl; це так само розширюється, як Perl.
Гаразд - коли використовувати кожен?
Я не знаю нічого, що Perl може зробити, що Python не може, ні навпаки. Вибір між ними залежатиме від інших факторів. Я навчився Perl ще до того, як був Python, тому я, як правило, використовую його. У Python синтаксис має менше, і він, як правило, дещо простіший у навчанні. Коли він стане доступним, Perl 6 стане захоплюючим розвитком.
(Зауважте, що "огляди" Перла та Пітона, зокрема, жахливо неповні; на цю тему можна було написати цілі книги.)
awk
над sed
для навчання (хоча і до сих пір їх використання). Щодо розміру завдання: sed
це найкраще, коли він обробляє по одному рядку, без зберігання від рядка до рядка. awk
часто використовується для нарощування асоціативних масивів із даними, накопиченими з усіх джерел; він використовує більше пам'яті, і тому набагато більше шансів зіткнутися з проблемами з великими наборами даних, ніж sed
є. Я не чув про те, tsawk
перш ніж ви зв’язалися з цим. Я схильний відкидатися на Perl (але ви можете краще зробити з Python), коли завдання занадто багато awk
.
Освоївши кілька десятків мов, ви втомитесь від таких людей, як С. Лотт (див. Його суперечливу відповідь на це запитання, майже вдвічі менше голосів, що були вниз (+ 45 / -22) через шість років після відповіді).
Sed - найкращий інструмент для надзвичайно простих конвеєрів командного рядка. В руках майстра sed, він підходить для одноразових довільних складностей, але його не слід використовувати у виробничому коді, за винятком дуже простих трубопроводів заміни. Такі речі, як "s / this / that /".
Gawk (GNU awk) на сьогоднішній день є найкращим вибором для складного переформатування даних, коли є лише одне джерело вводу та один вихід (або кілька записів, записаних послідовно). Оскільки велика кількість справжньої роботи відповідає цьому опису, і хороший програміст може навчитися гоуку за дві години, це найкращий вибір. На цій планеті простіше і швидше краще!
Perl або Python набагато кращі, ніж будь-яка версія awk або sed, коли у вас дуже складні сценарії введення / виводу. Чим складніша проблема, тим краще ви використовуєте python з точки зору технічного обслуговування та читання. Однак зауважте, що хороший програміст може писати читабельний код будь-якою мовою, а поганий програміст може писати незрозуміле лайно будь-якою корисною мовою, тому вибір perl або python можна сміливо залишати за уподобанням програміста, якщо зазначений програміст є кваліфікований та розумний.
a?ⁿaⁿ
на, a??ⁿaⁿ
тоді запустіть це в Perl 5 зі ⁿ
1000000, він запуститься менше ніж за дві секунди. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Якщо ви запускаєте наївну людину, це займе більше двох секунд протягом ⁿ
всього 25. Що ви повинні усвідомити, Perl має більше функцій регексу, ніж ті, які швидші, включаючи, що ви можете мати код Perl всередині регексу, який змінює те, що йому відповідає . Ви можете реалізувати модуль, який замінює вбудований модуль на один з тих інших, якщо хочете.
Я б не назвав sed повноцінною мовою програмування, це редактор потоків з мовними конструкціями, спрямованими на програмне редагування текстових файлів.
Awk - це трохи більше мова загального призначення, але вона все ще найкраще підходить для обробки тексту.
Perl і Python - це повністю розвинені мови загального призначення. Perl має коріння в обробці тексту і має ряд конструкцій, подібних до дивних (навіть у мережі існує плаваючий сценарій awk-perl). Існує багато розбіжностей між Perl та Python, найкраще вам, мабуть, читати резюме обох мов на чомусь, наприклад, у Вікіпедії, щоб добре зрозуміти, що вони є.
По-перше, у списку є дві незв’язані речі "Perl, Python awk and sed".
Річ 1 - спрощені засоби маніпулювання текстом.
sed. Він має фіксований, відносно простий обсяг роботи, визначений ідеєю читання та вивчення кожного рядка файлу. sed не розроблений так, щоб він був особливо читабельним. Він розроблений, щоб бути дуже маленьким і дуже ефективним на дуже крихітних серверах Unix.
awk Він має трохи менш фіксований, менш простий обсяг роботи. Однак основний цикл програми awk визначається неявним читанням рядків вихідного файлу.
Це не "повні" мови програмування. У той час як ви можете - за допомогою деякої роботи - писати досить складні програми дивним чином, це швидко ускладнюється і важко читається.
Річ 2 - мови програмування загального призначення. Вони мають велику різноманітність типів операторів, численні вбудовані структури даних і жодних припущень чи ярликів, про які можна говорити.
Perl
Пітон.
Коли їх використовувати.
sed. Ніколи. Це дійсно не має ніякої цінності в сучасній епосі комп'ютерів з більш ніж 32 Кб пам'яті. Perl або Python роблять ті самі речі чіткіше.
awk Ніколи. Як і sed, він відображає більш ранню епоху обчислень. Замість того, щоб підтримувати цю мову (крім усіх інших, необхідних для успішної системи), приємніше просто робити все однією приємною мовою.
Perl Будь-яка проблема програмування будь-якого типу. Якщо вам подобається синтаксис вільного мислення, де існує багато, багато способів зробити те саме, perl - це весело.
Пітон. Будь-яка проблема програмування будь-якого типу. Якщо вам подобається досить обмежений синтаксис, де менше варіантів, менше тонкощів і (можливо) більше чіткості. Об'єктно-орієнтована природа Python робить його більш придатним для великих, складних проблем.
Передісторія - я не збиваюся з невідомості. Я дізнався про awk більше 20 років тому. З цим зробив багато речей; використовується для того, щоб викладати це як основний навик Unix. Я навчився Perl близько 15 років тому. З цим зробив багато складних речей. Я залишив обох позаду, тому що я можу робити однакові речі в Python - і це простіше і зрозуміліше.
Є дві серйозні проблеми з sed і awk, жодна з яких не є їхнім віком.
Незавершеність їх реалізації. Все, що можна зробити, можна зробити в Python або Perl, часто простіше, а іноді і швидше. Трубопровід оболонки має деякі переваги в експлуатації через багаторазову обробку. Python пропонує subprocess
модуль, який дозволить мені відновити ці переваги.
Необхідність вивчити ще одну мову. Роблячи дії в Python (або Perl), ваша реалізація залежить від меншої кількості мов, внаслідок чого ясність збільшується.
Коли їх використовувати: awk - ніколи - С. Лотт.
Я думаю, що С. Лотт трохи не пропустив оцінку з цією рекомендацією. Справа в тому, що в Linux та інших середовищах UNIX awk є корисним інструментом для використання bash, sh та ksh для швидкої обробки тексту. Сама ідея створення сценаріїв - ви вирішите свою проблему, склеївши цей інструмент, цей інструмент. Отже, в сценаріях адміністратора, як правило, є ls, grep, |, awk, time, ps тощо. Кожен - це інструмент, який сценарій поєднує як цегла будівельника цеглою для завершення будівництва (для вирішення проблеми під рукою) .
Наприклад, я є членом команди управління командою приладдям пейнтбольного обладнанняdotcom. Цей веб-сайт для електронної комерції базується на степі LAMP. Для автоматизованої обробки та нормалізації каналів даних різних постачальників у базі даних задніх частин ми використовуємо та підтримуємо різноманітну суміш сценаріїв, включаючи bash, perl, php та навіть очікувати. Кожен має свої сильні сторони на основі доступних модулів та API. У скриптах bash ми робимо швидкі відповідність шаблонів та відповідні дії за шаблонами за потребою за допомогою awk без необхідності перемикатися на PERL. Я хотів би також зазначити одне, що не було підкреслено ниткою, - це те, що досить багато цих сценаріїв було придбано або отримано з відкритого коду. Якщо сценарій вийшов Perl, ми підтримуємо його як Perl; якщо сценарій вийшов як Php, ми підтримуємо його як Php; якщо він прийшов як баш, ми підтримуємо його як баш;
ls
, використовуйте глобул замість цього. Прочитай це.