Jakie są różnice między Perlem, Pythonem, AWK i sed? [zamknięte]

Po prostu chcesz wiedzieć, jakie są główne różnice między nimi? i moc każdego języka (gdzie lepiej go używać).

Edit: to nie jest" vs. " jak temat, tylko informacja.

Author: Leon Timmermans, 2008-12-15

5 answers

W kolejności pojawienia się języków są sed, awk, perl, python.

Program sed jest edytorem strumieni i jest przeznaczony do stosowania akcji ze skryptu do każdej linii (lub, bardziej ogólnie, do określonych zakresów linii) pliku wejściowego lub plików. Jego język jest oparty na ed, edytorze uniksowym, i chociaż ma warunki i tak dalej, jest trudny do pracy przy złożonych zadaniach. Można z nim czynić drobne cuda - ale kosztem włosów na głowie. Jednakże, jest to prawdopodobnie najszybszy z programów podczas prób wykonywania zadań w ramach jego kompetencji. (Zawiera najmniej potężne wyrażenia regularne omawianych programów-odpowiednie do wielu celów, ale na pewno nie wyrażenia regularne kompatybilne z PCRE-Perl) {]}

Program awk (Nazwa od inicjałów jego autorów-Aho, Weinberger i Kernighan) jest pierwotnie narzędziem do formatowania raportów. Może być używany jako souped up sed; w nowszych wersjach jest kompletna obliczeniowo. Wykorzystuje ciekawy pomysł-program opiera się na "wzorcach dopasowanych" i "działaniach podejmowanych, gdy wzór pasuje". Wzorce są dość potężne (Rozszerzone wyrażenia regularne). Język operacji jest podobny do C. jedną z kluczowych cech awk jest to, że automatycznie dzieli linie wejściowe na pola.

Perl został napisany częściowo jako awk-killer I sed-killer. Dwa z dostarczonych programów to a2p i {[10] } do konwersji skryptów awk i sed skrypty do Perla. Perl jest jednym z najwcześniejszych języków skryptowych nowej generacji (Tcl/Tk może prawdopodobnie domagać się pierwszeństwa). Posiada potężną, zintegrowaną obsługę wyrażeń regularnych z znacznie potężniejszym językiem. Zapewnia dostęp do prawie wszystkich wywołań systemowych i ma rozszerzalność modułów CPAN. (Ani awk, ani sed nie są rozszerzalne.) Jednym z haseł Perla jest "tmtowtdi - jest na to więcej niż jeden sposób" (wymawiane "tim-toady"). Perl ma 'obiekty', ale jest bardziej dodatek niż podstawowa część języka.

Python został napisany jako ostatni i prawdopodobnie częściowo jako reakcja na Perla. Ma kilka ciekawych pomysłów składniowych(wcięcia, aby wskazać poziomy-bez nawiasów lub odpowiedników). Jest bardziej zorientowany obiektowo niż Perl; jest tak samo rozszerzalny jak Perl.

OK-kiedy używać każdego?

  • sed - gdy trzeba wykonać proste przekształcenia tekstu na plikach.
  • awk - gdy potrzebujesz tylko prostego formatowania i Podsumowanie lub transformacja danych.
  • perl-dla prawie każdego zadania, ale szczególnie, gdy zadanie wymaga złożonych wyrażeń regularnych.
  • python - do tych samych zadań, do których można użyć Perla.

Nie jestem świadomy niczego, co Perl potrafi, czego Python nie potrafi, ani odwrotnie. Wybór między nimi zależałby od innych czynników. Nauczyłem się Perla zanim pojawił się Python, więc zwykle go używam. Python ma mniej rozbudowaną składnię i generalnie jest nieco prostsze do nauczenia. Perl 6, Kiedy będzie dostępny, będzie fascynującym rozwojem.

(zauważ ,że 'przeglądy' Perla i Pythona, w szczególności, są żałośnie niekompletne; całe książki mogłyby być napisane na ten temat.)

 505
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-14 21:44:28

Po opanowaniu kilkudziesięciu języków znudzą Cię tacy ludzie jak S. Lott (zobacz jego kontrowersyjną odpowiedź na to pytanie, prawie o połowę mniej głosów w dół niż w górę (+45/-22) sześć lat po odpowiedzi).

Sed jest najlepszym narzędziem do bardzo prostych potoków wiersza poleceń. W rękach mistrza sed nadaje się do jednorazowych o dowolnej złożoności, ale nie powinien być stosowany w kodzie produkcyjnym z wyjątkiem bardzo prostych potoków zastępczych. Rzeczy jak 's / to / tamto/.'

Gawk (GNU awk) jest zdecydowanie najlepszym wyborem do skomplikowanego formatowania danych, gdy istnieje tylko jedno źródło wejściowe i jedno wyjście (lub wiele wyjść zapisanych sekwencyjnie). Ponieważ wiele pracy w realnym świecie odpowiada temu opisowi, a dobry programista może nauczyć się gawk w dwie godziny, jest to najlepszy wybór. Na tej planecie prostsze i szybsze jest lepsze!

Perl lub Python są znacznie lepsze niż jakakolwiek wersja awk lub sed, gdy masz bardzo złożone scenariusze wejścia/wyjścia. Im bardziej złożony jest problem, tym lepiej używasz Pythona, z punktu widzenia konserwacji i czytelności. Zauwaĺź jednak, Ĺźe dobry programista moĹźe napisaÄ ‡ czytelny kod w kaĹźdym jÄ ™ zyku, a ZĹ 'y programista moĹźe napisaÄ ‡ niemaĹ' e badziewie w kaĹźdym uĺźytecznym jÄ ™ zyku, wiÄ ™ c wybĂłr Perla lub Pythona moĹźe byÄ ‡ bezpiecznie pozostawiony do preferencji programisty, jeĹ " li jest on wykwalifikowany i sprytny.

 82
Author: Charlie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-08 15:20:15

Po pierwsze, na liście "Perl, Python awk i sed"znajdują się dwie niezwiązane ze sobą rzeczy.

Rzecz 1-uproszczone narzędzia do manipulacji tekstem.

  • Sed. Ma stały, stosunkowo prosty Zakres pracy określony ideą odczytu i zbadania każdej linii pliku. sed nie jest zaprojektowany tak, aby był szczególnie czytelny. Został zaprojektowany tak, aby był bardzo mały i bardzo wydajny na bardzo małych serwerach unix.

  • Awk. Ma nieco mniej stały, mniej prosty Zakres pracy. Jednak główna pętla programu awk jest zdefiniowana przez niejawny odczyt linii pliku źródłowego.

Nie są to "kompletne" języki programowania. Podczas gdy można-przy odrobinie pracy-pisać dość wyrafinowane programy w awk, szybko staje się to skomplikowane i trudne do odczytania.

Rzecz 2-języki programowania ogólnego przeznaczenia. Mają one bogatą różnorodność typów instrukcji, liczne wbudowane struktury danych i brak przewodowych założeń lub skrótów do mówienia z.

  • Perl.

  • Python.

Kiedy ich używać.
  • Sed. Nigdy. To naprawdę nie ma żadnej wartości we współczesnej erze komputerów z więcej niż 32K pamięci. Perl lub Python robią to samo wyraźniej.

  • Awk. Nigdy. Podobnie jak sed, odzwierciedla wcześniejszą erę komputerów. Zamiast utrzymywać ten język (oprócz wszystkich innych wymaganych do udanego systemu), przyjemniej jest po prostu zrobić wszystko w jednym przyjemnym języku.

  • Perl. Jakikolwiek problem z programowaniem. Jeśli lubisz wolnomyślicielską składnię, gdzie jest wiele, wiele sposobów na zrobienie tego samego, perl jest zabawny.

  • Python. Jakikolwiek problem z programowaniem. Jeśli lubisz dość ograniczoną składnię, gdzie jest mniej opcji, mniej subtelności i (być może)więcej jasności. Obiektowy charakter Pythona sprawia, że jest on bardziej odpowiedni dla dużych, złożonych problemów.

Tło -- Nie biję sed i awk z ignorancji. Nauczyłem się awk ponad 20 lat temu. Robił z nim wiele rzeczy; uczył go jako podstawowej umiejętności Uniksa. Nauczyłem się Perla jakieś 15 lat temu. Zrobił z nim wiele wyrafinowanych rzeczy. Zostawiłem oba, ponieważ mogę robić to samo w Pythonie - i to jest prostsze i bardziej jasne.

Istnieją dwa poważne problemy z sed i awk, z których żaden nie jest ich wiek.
  1. Niekompletność ich realizacji. Wszystko sed i awk do mogą być wykonywane w Pythonie lub perlu, często prostsze, a czasami szybsze. Rurociąg powłoki ma pewne zalety wydajności ze względu na jego wielokrotne przetwarzanie. Python oferuje moduł subprocess, który pozwala mi odzyskać te zalety.

  2. Potrzeba nauczenia się innego języka. Robiąc rzeczy w Pythonie (lub perlu), twoja implementacja zależy od mniejszej liczby języków, co w rezultacie zwiększa przejrzystość.

 24
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-31 08:02:09

Nie nazwałbym sed pełnowartościowym językiem programowania, jest to edytor strumieniowy z konstrukcjami językowymi mającymi na celu programową edycję plików tekstowych.

Awk jest trochę bardziej językiem ogólnego przeznaczenia, ale nadal najlepiej nadaje się do przetwarzania tekstu.

Perl i Python są pełnowartościowymi językami programowania ogólnego przeznaczenia. Perl ma swoje korzenie w przetwarzaniu tekstu i ma wiele konstrukcji podobnych do awk (istnieje nawet skrypt awk-to-perl unoszący się w sieci). Istnieje wiele różnic między Perlem i Pythonem, najlepiej jest przeczytać streszczenia obu języków na czymś takim jak Wikipedia, aby dobrze zrozumieć, czym są.

 19
Author: Robert Gamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-14 21:18:47

Kiedy ich używać: awk-nigdy-S. Lott.

Myślę, że S. Lott nieco przeoczył tę rekomendację. Faktem jest, że w Linuksie i innych środowiskach uniksowych awk jest użytecznym narzędziem do użycia z bash, sh i ksh do szybkiego przetwarzania tekstu. Idea tworzenia skryptów polega na tym, że rozwiązujesz swój problem, sklejając ze sobą to narzędzie, to narzędzie. Stąd w skryptach admina, często ma ls, grep|/, awk, time, ps, itp. Każde z nich jest narzędziem, które scripter łączy jak konstruktor cegła po cegle, aby ukończyć budynek (aby rozwiązać problem pod ręką).

Na przykład jestem członkiem zespołu zarządzającego Paintball gear supplies dotcom. Ta strona e-commerce opiera się na stosie LAMP. W celu zautomatyzowanego przetwarzania i normalizacji kanałów danych od różnych dostawców do bazy danych zaplecza stosujemy i utrzymujemy zróżnicowaną mieszankę skryptów, w tym bash, perl, php, a nawet expect. Każdy ma swoje mocne strony w oparciu o dostępne moduły i API. W skrypty bash wykonujemy szybkie dopasowanie wzorców i odpowiednie akcje na wzorcach w razie potrzeby za pomocą awk bez konieczności przełączania się na PERL. Jedną z rzeczy, na które chciałbym również zwrócić uwagę, która nie została podkreślona w wątku, jest to, że spora liczba tych skryptów została zakupiona lub pozyskana z open source. Jeśli skrypt przyszedł jako Perl, utrzymujemy go jako Perl; jeśli skrypt przyszedł jako Php, utrzymujemy go jako Php; jeśli przyszedł jako bash, utrzymujemy go jako bash; nie piszemy go ponownie w innym języku tylko dlatego, że uważamy, że jest mniej wydajny w oryginalnym języku.

 11
Author: tao quam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-08 16:34:53