chcesz wiedzieć, jakie są między nimi główne różnice? oraz moc każdego języka (tam, gdzie lepiej go używać).
Edycja: to nie jest „vs.” jak temat, tylko informacja.
chcesz wiedzieć, jakie są między nimi główne różnice? oraz moc każdego języka (tam, gdzie lepiej go używać).
Edycja: to nie jest „vs.” jak temat, tylko informacja.
Odpowiedzi:
W kolejności pojawiania się, że języki są sed
, awk
, perl
, python
.
sed
Program to edytor strumień i jest przeznaczony do zastosowania działań ze skryptu do każdej linii (lub, bardziej ogólnie, do określonych zakresach linii) pliku wejściowego lub plików. Jego język jest oparty na ed
edytorze uniksowym i chociaż ma warunki warunkowe i tak dalej, ciężko jest pracować z nim przy złożonych zadaniach. Dzięki temu możesz dokonywać drobnych cudów - ale kosztem włosów na głowie. Jest to jednak prawdopodobnie najszybszy z programów podczas próby wykonania zadań w ramach jego kompetencji. (Zawiera najmniej wydajne wyrażenia regularne omawianych programów - odpowiednie do wielu celów, ale na pewno nie PCRE - wyrażenia regularne zgodne z Perlem)
awk
Programu (nazwa pochodzi od inicjałów jego autorów - Aho, Weinberger i Kernighana) jest narzędziem początkowo do formatowania raportów. Może być stosowany jako przysmak sed
; w nowszych wersjach jest obliczeniowo ukończony. Wykorzystuje ciekawy pomysł - program opiera się na „dopasowanych wzorach” i „działaniach podejmowanych, gdy wzorce się zgadzają”. Wzorce są dość potężne (Rozszerzone wyrażenia regularne). Język akcji jest podobny do C. Jedną z kluczowych cech awk
jest to, że automatycznie dzieli dane wejściowe na rekordy, a każdy rekord na pola.
Perl został napisany częściowo jako zabójca awk i sed zabójca. Dwa z programów dostarczonych z nim są a2p
i s2p
do konwersji awk
skryptów i sed
skrypty w Perlu. Perl jest jednym z najwcześniejszych języków skryptowych nowej generacji (Tcl / Tk prawdopodobnie może rościć sobie pierwszeństwo). Ma potężną, zintegrowaną obsługę wyrażeń regularnych o znacznie potężniejszym języku. Zapewnia dostęp do prawie wszystkich wywołań systemowych i ma rozszerzalność modułów CPAN. (Ani awk
nie sed
jest rozszerzalny.) Jednym z mottów Perla jest „TMTOWTDI - Jest na to więcej niż jeden sposób” (wymawiane jako „tim-toady”). Perl ma „obiekty”, ale jest to raczej dodatek niż podstawowa część języka.
Python został napisany jako ostatni i prawdopodobnie częściowo jako reakcja na Perla. Ma kilka interesujących pomysłów składniowych (wcięcia w celu wskazania poziomów - brak nawiasów klamrowych lub odpowiedników). Jest bardziej zorientowany obiektowo niż Perl; jest tak samo rozszerzalny jak Perl.
OK - kiedy z nich korzystać?
Nie jestem świadomy niczego, co Perl może zrobić, czego nie potrafi Python, i odwrotnie. Wybór między tymi dwoma zależeć będzie od innych czynników. Nauczyłem się Perla, zanim powstał Python, więc zwykle go używam. Python ma mniej akredytowaną składnię i ogólnie jest nieco łatwiejszy do nauczenia się. Perl 6, gdy będzie dostępny, będzie fascynującym wydarzeniem.
(Zwróć uwagę, że w szczególności „przeglądy” Perla i Pythona są żałośnie niepełne; na ten temat można napisać całe książki).
awk
nad sed
do nauki (choć oba nadal mają zastosowanie). Jeśli chodzi o rozmiar zadania: sed
jest w najlepszym wydaniu, gdy przetwarza jedną linię na raz, bez pamięci między liniami. awk
jest często wykorzystywany do tworzenia tablic asocjacyjnych z danymi zgromadzonymi ze wszystkich źródeł; zużywa więcej pamięci i dlatego jest znacznie bardziej narażony na problemy z dużymi zestawami danych niż sed
jest. Nie słyszałem o tym tsawk
wcześniej. Mam tendencję do polegania na Perlu (ale lepiej radzisz sobie z Pythonem), gdy zadanie jest zbyt trudne awk
.
Po opanowaniu kilkudziesięciu języków znudziły się osoby takie jak S. Lott (zobacz jego kontrowersyjną odpowiedź na to pytanie, prawie o połowę mniej głosów niż w górę (+ 45 / -22) sześć lat po udzieleniu odpowiedzi).
Sed jest najlepszym narzędziem do bardzo prostych rurociągów wiersza poleceń. W rękach mistrza sed jest odpowiedni do jednorazowych działań o dowolnej złożoności, ale nie powinien być stosowany w kodzie produkcyjnym, z wyjątkiem bardzo prostych potoków zastępczych. Rzeczy takie jak „s / this / that /.”
Gawk (GNU awk) jest zdecydowanie najlepszym wyborem do złożonego formatowania danych, gdy istnieje tylko jedno źródło wejściowe i jedno wyjście (lub wiele wyjść zapisanych kolejno). Ponieważ duża część pracy w świecie rzeczywistym jest zgodna z tym opisem, a dobry programista może nauczyć się gawk w ciągu dwóch godzin, jest to najlepszy wybór. Na tej planecie łatwiej i szybciej jest lepiej!
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 pisać czytelny kod w dowolnym języku, a zły programista może pisać nie dające się utrzymać bzdury w dowolnym przydatnym języku, więc wybór perla lub pytona można bezpiecznie pozostawić preferencjom programisty, jeśli programista jest wykwalifikowany i sprytny.
a?ⁿaⁿ
na, a??ⁿaⁿ
to uruchom to w Perlu 5 z ⁿ
1 000 000 uruchomi się w mniej niż dwie sekundy. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Jeśli uruchomisz ten naiwny, zajmie to więcej niż dwie sekundy dla ⁿ
zaledwie 25. Musisz zrozumieć, że Perl ma więcej funkcji wyrażenia regularnego niż te szybsze, w tym pozwala na umieszczenie w wyrażeniu kodu Perla, który zmienia to, co pasuje . Możesz zaimplementować moduł, który zamienia wbudowany na jeden z tych innych, jeśli chcesz.
Nie nazwałbym sed pełnoprawnym językiem programowania, jest to edytor strumieniowy z konstrukcjami językowymi służącymi do programowej edycji 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łnoprawnymi językami programowania ogólnego przeznaczenia. Perl ma swoje korzenie w przetwarzaniu tekstu i ma wiele konstrukcji podobnych do awk (w sieci krąży nawet skrypt awk-to-perl). Istnieje wiele różnic między Perlem a Pythonem. Najlepiej jest przeczytać streszczenia obu języków na czymś takim jak Wikipedia, aby dobrze zrozumieć, czym one są.
Po pierwsze, na liście „Perl, Python awk i sed” znajdują się dwie niepowiązane rzeczy.
Rzecz 1 - uproszczone narzędzia do manipulacji tekstem.
sed. Ma ustalony, stosunkowo prosty zakres pracy określony przez pomysł czytania i sprawdzania 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 ustalony, mniej prosty zakres pracy. Jednak główna pętla programu awk jest zdefiniowana przez niejawne czytanie wierszy pliku źródłowego.
Nie są to „kompletne” języki programowania. Chociaż możesz - przy odrobinie pracy - pisać dość zaawansowane programy w awk, szybko się komplikuje i jest trudny do odczytania.
Rzecz 2 - języki programowania ogólnego zastosowania. Mają one bogatą różnorodność typów instrukcji, liczne wbudowane struktury danych oraz brak wbudowanych założeń i skrótów, o których można mówić.
Perl
Pyton.
Kiedy ich używać.
sed. Nigdy. Naprawdę nie ma żadnej wartości we współczesnej erze komputerów z ponad 32 KB 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 dla udanego systemu), przyjemniej jest po prostu robić wszystko w jednym przyjemnym języku.
Perl Wszelkie problemy z programowaniem dowolnego rodzaju. Jeśli lubisz swobodnie myślącą składnię, w której jest wiele sposobów na zrobienie tego samego, Perl jest fajny.
Pyton. Wszelkie problemy z programowaniem dowolnego rodzaju. Jeśli lubisz dość ograniczoną składnię, w której jest mniej opcji, mniej subtelności i (być może) większej przejrzystości. Zorientowana obiektowo natura Pythona sprawia, że jest bardziej odpowiedni dla dużych, złożonych problemów.
Tło - nie walę sedem i wybijam się z ignorancji. Nauczyłem się awk ponad 20 lat temu. Zrobił z tym wiele rzeczy; używane do nauczania go jako podstawowej umiejętności uniksowej. Nauczyłem się Perla około 15 lat temu. Zrobił z nim wiele wyrafinowanych rzeczy. Zostawiłem oba, ponieważ mogę robić te same rzeczy w Pythonie - i jest to prostsze i bardziej przejrzyste.
Istnieją dwa poważne problemy z sed i awk, z których żaden nie jest w ich wieku.
Niekompletność ich wdrożenia. Wszystko, co robią sed i awk, można zrobić w Pythonie lub Perlu, często prościej, a czasem także szybciej. Potok potoku ma pewne zalety pod względem wydajności ze względu na wielorakie przetwarzanie. Python oferuje subprocess
moduł, który pozwala mi odzyskać te zalety.
Potrzeba nauki jeszcze jednego języka. Robiąc rzeczy w Pythonie (lub Perlu), twoja implementacja zależy od mniejszej liczby języków, co powoduje zwiększenie przejrzystości.
Kiedy ich używać: awk - nigdy - S. Lott.
Myślę, że S. Lott nieznacznie nie trafił w tę rekomendację. Faktem jest, że w Linuksie i innych środowiskach UNIX awk jest użytecznym narzędziem do użycia z bash, sh i ksh do szybkiego przetwarzania tekstu. Sam pomysł pisania skryptów polega na tym, że rozwiązujesz problem, sklejając ze sobą to narzędzie, to narzędzie. Dlatego w skryptach administracyjnych często występują ls, grep, |, awk, time, ps itp. Każde z nich to narzędzie, które scripter łączy jak cegła budownicza cegła po cegle, aby ukończyć budynek (aby rozwiązać dany problem) .
Na przykład jestem członkiem zespołu zarządzającego zespołem dostawami sprzętu do paintballadotcom. Ta strona e-commerce opiera się na stosie LAMP. Do zautomatyzowanego przetwarzania i normalizacji plików danych od różnych dostawców do wewnętrznej bazy danych stosujemy i utrzymujemy zróżnicowaną kombinację skryptów, w tym bash, perl, php, a nawet oczekujemy. Każdy ma swoje mocne strony w oparciu o dostępne moduły i API. W skryptach bash wykonujemy szybkie dopasowywanie wzorców i odpowiednie działania na wzorach w razie potrzeby za pomocą awk bez konieczności przełączania się na PERL. Jedną rzeczą, na którą chciałbym zwrócić uwagę, która nie została podkreślona w tym wątku, jest to, że spora liczba tych skryptów została zakupiona lub otrzymana z otwartego źródła. Jeśli skrypt przyszedł jako Perl, zachowujemy go jako Perl; jeśli skrypt przyszedł jako Php, utrzymujemy go jako Php; jeśli przyszedł jako bash, utrzymujemy go jako bash;
ls
, zamiast tego użyj glob. Przeczytaj to.