Ciągle uczę się nowych narzędzi, nawet tych staromodnych, ponieważ lubię używać właściwego rozwiązania problemu.
Niemniej jednak zastanawiam się, czy jest jeszcze jakiś powód, aby się uczyć niektórych z nich. awk
na przykład jest interesujące dla mnie, ale dla zwykłego przetwarzania tekstu, można użyć grep
, cut
, sed
, itd., podczas gdy dla skomplikowanych, pójdę do Pythona.
Nie mam na myśli, że to nie jest potężne i poręczne narzędzie. Ale skoro nauka nowego narzędzia wymaga czasu i energii, czy warto ?
awk
text-processing
e-satis
źródło
źródło
Odpowiedzi:
Myślę, że zależy to od środowiska, w którym się znajdujesz. Jeśli jesteś osobą * nix, wiedza
awk
jest Dobrą Rzeczą. Jedynym innym środowiskiem skryptowym, które można znaleźć praktycznie w każdym * nixie, jestsh
. Więc podczasgrep
,sed,
etc pewnością może zastąpićawk
na nowoczesnej powszechnejlinux
dystrybucji, po przeniesieniu do bardziej egzotycznych systemów, znając trochęawk
będzie rzeczywistym Handy.awk
może być również używany nie tylko do przetwarzania tekstu. Na przykład jeden z moich przełożonych pisze kod w astronomiiawk
- to zupełnie jak stara szkoła i niesamowite jest. W jego czasach było to najlepsze narzędzie do pracy ... a teraz, mimo że jego uczniowie, tacy jak ja, używają Pythona, a co nie, trzyma się tego, co wie i działa dobrze.Podsumowując, na całym świecie krąży dużo starego kodu, wiedząc, że trochę
awk
nie zaszkodzi. To także sprawi, że będziesz lepszym * nix person :-)źródło
Jeśli szybko nauczysz się podstaw awk, możesz rzeczywiście robić niesamowite rzeczy w wierszu poleceń.
Ale prawdziwym powodem nauki awk jest wymówka, by przeczytać znakomitą książkę The AWK Programming Language jej autorów, Aho, Kernighana i Weinbergera. Z nazwy można by pomyśleć, że po prostu uczy cię awk. Właściwie to dopiero początek. Wchodząc w szeroki wachlarz problemów, które można rozwiązać, gdy używa się zwięzłego języka skryptowego, który ułatwia manipulowanie ciągami znaków - a awk był jednym z pierwszych - kontynuuje naukę czytelnika, jak zaimplementować bazę danych, parser, interpreter i (jeśli pamięć mi służy) kompilatorem dla języka komputerowego dla małego projektu! Gdyby tylko zaprogramowali przykładowy system operacyjny za pomocą awk, książka byłaby dość kompletnym wprowadzeniem do ankiety do informatyki!
Doskonale przejrzysty i zwięzły, podobnie jak oryginalna książka w języku C, jest również wspaniałym przykładem przyjaznego, technicznego pisania, wykonanego poprawnie. Nawet indeks to sztuka rzemieślnicza.
Awk? Jeśli go znasz, będziesz go czasami używać w wierszu poleceń, ale w przypadku czegokolwiek większego poczujesz się uwięziony, nie mogąc uzyskać dostępu do szerszych funkcji systemu i Internetu, do których zapewnia dostęp coś takiego jak Python. Ale książka? Zawsze będziesz zadowolony, że to przeczytałeś!
źródło
Jedynym powodem, dla którego używam,
awk
jest automatyczne dzielenie:Spowoduje to wypisanie trzeciego pola rozdzielanego spacjami w
file.in
. To trochę łatwiejsze niż:źródło
awk '{print $3}' < file.in
zamiastawk '{print $3}' file.in
? Czy awk nie czyta już plików przekazanych jako argumenty?awk
: /Myślę, że awk jest świetny, jeśli twój plik zawiera kolumny / pola . Używam go podczas przetwarzania / analizowania określonej kolumny w pliku wielokolumnowym. Lub jeśli chcę dodać / usunąć określoną kolumnę (y).
na przykład
zostanie wydrukowane tylko wtedy, gdy wartość drugiej kolumny w pliku rozdzielanym tabulatorami jest większa niż wartość w trzeciej kolumnie.
Oczywiście mógłbym użyć Perla lub Pythona, ale awk sprawia, że jest to o wiele prostsze dzięki zwięzłemu poleceniu jednowierszowemu.
Również nauka awk jest dość tania. Możesz nauczyć się podstaw awk w mniej niż godzinę, więc nie jest to tak duży wysiłek, jak nauka jakiegokolwiek innego języka programowania / skryptów.
źródło
Czasami używam AWK do pracy z HTML. Na przykład ten kod tłumaczy tabele na pliki csv:
Co jest świetne, jeśli skrobisz ekran. Właściwie może się zdarzyć, że uwielbiam AWK, ponieważ pozwala mi tak szybko zbudować niewłaściwe rozwiązanie problemów :) więcej przykładów . Wspomina się o tym także w cudownych perłach programowania Jona Bentleya .
źródło
Często używam awk. Jest to dobre rozwiązanie do bardzo prostego tasowania tekstu w środku potoku; wypełnia bardzo wąską niszę między nie potrzebowaniem go wcale a potrzebą wyrzucenia Perla / Pythona / czegokolwiek.
Nie radziłbym spędzać nad tym dużo czasu, ale może się przydać znajomość podstaw składni - przynajmniej na tyle, abyś mógł szybko zapoznać się z instrukcją, jeśli kiedykolwiek zechcesz z niej skorzystać.
źródło
Większość linerów awk one można osiągnąć za pomocą wkładek Perl one - jeśli zdecydujesz się wejść w sposób myślenia Perl one liner. Lub po prostu użyj trzech linerów Perl :)
Jeśli utrzymujesz skrypty powłoki napisane przez kogoś, kto lubił awk, to oczywiście będziesz musiał się nauczyć awk.
Nawet jeśli nie ma praktycznej potrzeby, jeśli znasz już wyrażenia regularne, opanowanie podstaw nie zajmie dużo czasu i fajnie jest zobaczyć, jak projektowano wtedy. Jest raczej elegancki.
źródło
Po 6 latach od zadania tego pytania mogę teraz z całą pewnością odpowiedzieć: nie, uczenie się awk nie jest tego warte.
Podstawowe zadania są obsługiwane, ale podstawowe polecenia bash, a nawet narzędzia GUI są łatwe. Bardziej złożone zadania można łatwo rozwiązać za pomocą nowoczesnych języków dynamicznych, takich jak Python (ulubiony lub mój) lub Ruby.
Zdecydowanie powinieneś nauczyć się współczesnego dynamicznego języka skryptowego, ponieważ pomoże ci on w wielu zadaniach (przeglądarka internetowa, administrator, przetwarzanie danych, automatyzacja itp.). W ten sposób uczenie się narzędzi takich jak awk jest całkowicie bezużyteczne, oszczędza co najwyżej kilka sekund każdego miesiąca.
źródło
Jeśli znasz już seda i używasz go, równie dobrze możesz przyswoić sobie przynajmniej trochę awk. Można je łączyć ze sobą w celu wykonania całkiem potężnych sztuczek. Zawsze zachwyca publiczność.
źródło
Computerworld przeprowadził niedawno wywiad z Alfredem V. Aho (jednym z trzech twórców AWK) na temat AWK. To całkiem ciekawa lektura. Może więc znajdziesz w tym kilka wskazówek, dlaczego warto nauczyć się AWK.
źródło
Nauka AWK była dla mnie nieoceniona podczas mojego ostatniego kontraktu pracującego nad wbudowanym systemem Linux, na którym nie był zainstalowany ani Perl, ani większość innych języków skryptowych.
źródło
awk ma bardzo dobry stosunek użyteczność / trudność, a „prosty awk” działa w każdym Uniksie / Linuksie / MacOS (i może być również zainstalowany w innych systemach).
Został zaprojektowany w złotym wieku, kiedy ludzie nienawidzili pisania, więc skrypty mogą być bardzo, bardzo krótkie i szybkie do napisania. Spróbuję zainstalować mawk, szybką wersję, podobno przyspiesza obliczenia około 9 razy, awk / gawk jest raczej powolny, więc jeśli chcesz go użyć zamiast R itp., Możesz chcieć mawk.
źródło
Jest to przydatne głównie wtedy, gdy musisz od czasu do czasu analizować pliki dziennika w poszukiwaniu danych lub danych wyjściowych programów podczas wykonywania skryptów powłoki, ponieważ w awk bardzo łatwo jest to osiągnąć, co zajęłoby trochę więcej linii kodu w Pythonie.
Z pewnością ma więcej mocy, ale wydaje się, że są to zadania, do których większość ludzi go używa.
źródło
Oczywiście: pracuję w środowisku, w którym jedynymi dostępnymi językami są: (jakiś shity language, który generuje COBOL, OMG, OMG), bash (stara wersja), perl (jeszcze go nie opanowałem), sed, awk i kilka innych narzędzi wiersza poleceń. Wiedza
awk
pozwoliła mi zaoszczędzić kilka godzin (i wygenerowałem kilka zadań związanych z przetwarzaniem tekstu z moich uczelni - przychodzą do mnie co najmniej trzy razy dziennie).źródło
Powiedziałbym, że prawdopodobnie już nie warto. Używam go od czasu do czasu jako o wiele bardziej wszechstronnego edytora strumieniowego niż sed z włączonymi możliwościami wyszukiwania, ale jeśli jesteś biegły w Pythonie, nie znam zadania, które byłbyś w stanie ukończyć o wiele szybciej, aby zrekompensować potrzebny czas nauczyć się awk.
Następujące polecenie jest prawdopodobnie jedynym, dla którego używałem awk w ciągu ostatnich dwóch lat (usuwa częściowo usunięte pakiety z moich systemów Debian / Ubuntu):
źródło
Nie.
Chociaż może to być interesujące, możesz zrobić wszystko, co potrafi awk, używając innych, potężniejszych narzędzi, takich jak Perl.
Poświęć swój czas na naukę tych potężniejszych narzędzi - i tylko przypadkowo zdobądź po drodze awk.
źródło
Powiedziałbym, że jest. W przypadku prostych rzeczy, AWK jest dużo łatwiejsze dla niedoświadczonego administratora / programisty niż Python. Możesz nauczyć się trochę AWK i zrobić wiele rzeczy, nauka Pythona oznacza naukę zupełnie nowego języka (tak, wiem, że AWK to język to też zmysł).
Perl może być w stanie zrobić wiele rzeczy, które potrafi AWK, ale zaoferowałem wybór w dzisiejszych czasach wybrałbym tutaj Pythona. Więc tak, powinieneś nauczyć się AWK. ale naucz się też Pythona :-)
źródło
awk
jest językiem elektronarzędzi, więcawk
jeśli jesteś informatykiem, prawdopodobnie znajdziesz go gdzieś. Jeśli można obsługiwać składni i regularnych wyrażeńgrep
ised
wtedy nie powinno być problemu zrywania sięawk
i to chyba warto.Gdzie znalazłem
awk
naprawdę połysk jest uproszczenie rzeczy jak przetwarzanie rekordy kilka linii i maglowania / interpolację wielu plików jednocześnie.źródło
Teraz, gdy PERL jest przeniesiony na prawie każdą znaczącą platformę, powiedziałbym, że nie jest tego wart. Jest bardziej wszechstronny niż razem sed i awk. Jeśli chodzi o automatyczne dzielenie, możesz to zrobić w perlu w ten sposób:
EDYCJA: nadal możesz chcieć nieco zapoznać się z awk, ponieważ niektóre inne narzędzia są oparte na jego filozofii działań opartych na wzorcach (np. DTrace w systemie Solaris).
źródło
Pracuję w obszarze, w którym pliki są w formacie kolumnowym. Dlatego awk jest dla mnie nieoceniony w REFORMATOWANIU pliku, tak aby różne programy mogły ze sobą współpracować. W przypadku zawodów niezwiązanych z IT używanie awk jest wystarczające i doskonałe. W dzisiejszych czasach szybkość komputera nie jest problemem, więc mogę połączyć awk i unix, aby przesłać wiele poleceń 1 linijek do „skryptu”. Dzięki wyszukiwaniu w Awk według pól i rekordów używam go do bardzo szybkiego sprawdzania danych pliku, zamiast „vi” do otwierania pliku. Muszę powiedzieć, że możliwości awk szczególnie przyniosły radość mojej pracy. Jestem w stanie pomóc współpracownikowi w szybkim rozwiązywaniu problemów za pomocą awk. Niesamowity kod dla mnie.
źródło
Niedawno próbowałem wyobrazić sobie pliki sieciowe pcap rejestrujące atak DOS o wartości ponad 20 Gb / s. Potrzebowałem znacznika czasu i adresów IP. W moim scenariuszu jednolinijkowy AWK działał fantastycznie i całkiem szybko. Specjalnie użyłem AWK do wyczyszczenia rozpakowanych plików, uzyskania adresów IP i całkowitej liczby pakietów z tych adresów IP w zgrupowanym przedziale czasu. Całkowicie zgadzam się z tym, co napisali powyżej inni. To zależy od Twoich potrzeb.
źródło
Jednym z powodów, dla których NIE należy uczyć się awk jest to, że nie ma on niechcianych dopasowań w wyrażeniach regularnych.
Mam kod awk, który teraz muszę przepisać tylko dlatego, że nagle zdebugowałem, że w awk / gawk nie ma czegoś takiego jak niechciane dopasowania, więc nie może poprawnie wykonać niektórych wyrażeń regularnych.
źródło
To zależy od twoich kolegów z zespołu, twojego lidera i zadania, nad którym pracujesz.
źródło
Obecnie zajmuję się kodowaniem w Pythonie. Ale nadal nie znam go na tyle dobrze, aby łatwo go używać do prostych, jednorazowych przekształceń plików.
Dzięki awk mogę szybko opracować jednowierszowy fragment kodu w linii poleceń unixa, który wykonuje całkiem niezłe transformacje. Za każdym razem, gdy używam awk, napisany przeze mnie fragment kodu będzie jednorazowy i nie będzie dłuższy niż kilka wierszy. Może instrukcja „if” i instrukcja „printf” tu lub tam w jednym wierszu.
W awk nigdy nie napisałem fragmentu kodu dłuższego niż 10 linii. Kilka takich skryptów widziałem lata temu.
Ale wszystko, co wymagało wielu wierszy kodu, użyłbym Pythona.
Uwielbiam awk. Jest to bardzo potężne narzędzie w połączeniu z sedem.
źródło