Czy jest jeszcze jakiś powód do nauki AWK?

Ciągle uczę się nowych narzędzi, nawet tych staromodnych, ponieważ lubię używać odpowiedniego rozwiązania problemu.

Niemniej jednak, zastanawiam się, czy jest jeszcze jakiś powód, aby nauczyć się niektórych z nich. awk Na przykład jest dla mnie interesujący, ale do prostego przetwarzania tekstu mogę użyć grep, cut, sed, itd. a jeśli chodzi o złożone, to pójdę po Pythona. Nie chodzi mi o to, że nie jest to potężne i poręczne narzędzie. Ale ponieważ potrzeba czasu i energii, aby nauczyć się nowego narzędzia, czy warto ?
Author: k0pernikus, 2008-09-20

23 answers

Myślę, że to zależy od środowiska, w którym się znajdziesz. Jeśli jesteś osobą *nix, to znajomość awk jest dobrą rzeczą. Jedynym środowiskiem skryptowym, które można znaleźć praktycznie na każdym *nix jest sh. Więc podczas grep, sed, etc może z pewnością zastąpić awk Na nowoczesnym mainstreamie linux distro, kiedy przeniesiesz się do bardziej egzotycznych systemów, znajomość trochę awk będzie naprawdę przydatna.

awk może być również używany do więcej niż tylko przetwarzania tekstu. Na przykład jeden z moich superbohater pisze w awk - taki jest całkowicie old school i awesome. Za jego czasów było to najlepsze narzędzie do tej roboty... i teraz, mimo że jego uczniowie jak ja używają Pythona, a co nie, on trzyma się tego, co wie i działa dobrze.

Na zakończenie, jest dużo starego kodu kopiącego na całym świecie, wiedząc, że trochę awk nie zaszkodzi. To również sprawi, że będziesz lepszy * Nix osoba: -)

 85
Author: freespace,
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-09-20 08:31:51

Jeśli szybko nauczysz się podstaw awk, możesz naprawdę robić niesamowite rzeczy w wierszu poleceń.

Ale prawdziwym powodem do nauki awk jest posiadanie pretekstu do przeczytaniasuperb książkijęzyk programowania AWK jej autorów Aho, Kernighan i Weinberger. Z nazwy można by pomyśleć, że to po prostu uczy awk. Właściwie to dopiero początek. Wprowadzenie do szerokiej gamy problemów, które można rozwiązać, gdy ktoś używa zwięzłego język skryptowy, który ułatwia manipulację łańcuchami-a awk był jednym z pierwszych - uczy czytelnika, jak zaimplementować bazę danych, parser, interpreter i (jeśli pamięć mi służy) kompilator dla małego języka komputerowego specyficznego dla projektu! Gdyby tylko zaprogramowali przykładowy system operacyjny za pomocą awk, książka byłaby dość kompletnym wprowadzeniem do informatyki!

Doskonale jasne i zwięzłe, podobnie jak oryginalna książka w języku C, również jest wspaniałym przykładem przyjaznego pisania technicznego wykonanego dobrze. Nawet Indeks to kawałek rzemiosła.

Awk? Jeśli go znasz, będziesz go używać w wierszu poleceń od czasu do czasu, ale w przypadku większych rzeczy poczujesz się uwięziony, nie możesz uzyskać dostępu do szerszych funkcji systemu i Internetu, do których dostęp zapewnia coś takiego jak Python. Ale książka? Zawsze będziesz zadowolony, że to przeczytałeś!

 87
Author: Brandon Rhodes,
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
2009-03-31 21:38:15

Jedynym powodem, dla którego używam {[2] } jest automatyczne dzielenie:

awk '{print $3}' < file.in

Wyświetla trzecie pole oddzielone białymi znakami w file.in. To trochę łatwiejsze niż:

tr -s ' ' < file.in | cut -d' ' -f3
 27
Author: Greg Hewgill,
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-09-20 08:28:14

Myślę, że awk jest świetny, jeśli plik zawiera kolumny / pola . Używam go podczas przetwarzania / analizy określonej kolumny w pliku wielokolumnowym. Lub jeśli chcę dodać / usunąć określoną kolumnę(y).

Np.

awk -F \t '{ if ($2 > $3) print; }' <filename>

Wyświetli tylko wtedy, gdy wartość 2. kolumny w oddzielonym pliku tabulacji jest większa niż wartość 3.kolumny.

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ść tanio. Możesz nauczyć się podstaw awk w mniej niż godzinę, więc nie jest to tyle wysiłku, co nauka jakiegokolwiek innego języka programowania / skryptów.

 22
Author: Nikhil,
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-09-20 08:52:12

Używam AWK okazjonalnie do czynienia z HTML. Na przykład ten kod tłumaczy tabele na pliki csv:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

Co jest świetne, jeśli skrobasz ekran. Właściwie może być tak, że uwielbiam AWK, ponieważ pozwala mi to szybko zbudować błędne rozwiązanie problemów:) więcej przykładów . Jest również wspomniana w "lovely Programming Pearls" Jona Bentleya.

 7
Author: Dave,
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-11-08 22:03:12

Używam awk co jakiś czas. Jest dobry do bardzo prostego tasowania tekstu w środku rurociągu; wypełnia bardzo wąską niszę pomiędzy Nie potrzebowaniem go w ogóle a potrzebą wyrzucenia Perla / Pythona / czegokolwiek.

Nie radziłbym poświęcać dużo czasu na to, ale może się przydać znajomość podstaw składni - przynajmniej na tyle, aby można było szybko zapoznać się z podręcznikiem, jeśli kiedykolwiek chcesz go używać.

 5
Author: Eevee,
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-09-20 08:26:41

Większość linerów awk one można osiągnąć za pomocą linerów Perl one - jeśli zdecydujesz się na podejście Perl one liner. Lub po prostu użyj trzech linerów Perla:)

Jeśli utrzymujesz skrypty powłoki napisane przez kogoś, kto lubił awk, to oczywiście będziesz musiał nauczyć się awk.

Nawet jeśli nie ma praktycznej potrzeby, jeśli znasz już regex, nie potrwa długo, aby podnieść podstawy, i to jest zabawne, aby zobaczyć, jak rzeczy zostały zaprojektowane w tamtych czasach. Jest dość elegancki.

 5
Author: slim,
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
2012-09-28 12:15:06

Jeśli już znasz i używasz sed, równie dobrze możesz podnieść chociaż trochę awk. Można je połączyć w kilka potężnych sztuczek. Zawsze imponuje publiczności.

 4
Author: Internet Friend,
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-09-20 08:32:24

Computerworld przeprowadził niedawno Wywiad z Alfredem V. Aho (jednym z trzech twórców AWK) na temat AWK. Ciekawa lektura. Więc może znajdziesz w nim jakieś wskazówki, dlaczego to dobry pomysł naucz się AWK.

 3
Author: dlat,
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-09-26 11:14:31

Nauka AWK była dla mnie nieoceniona w moim ostatnim kontrakcie pracy nad wbudowanym systemem Linux, na którym nie zainstalowano ani Perla, ani większości innych języków skryptowych.

 3
Author: George Jempty,
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-11-14 10:33:14

6 lat po zadaniu tego pytania mogę teraz odpowiedzieć z całą pewnością: nie, nauka awk nie jest tego warta.

Podstawowe zadania są obsługiwane, ale podstawowe polecenia bash, a nawet narzędzia GUI łatwo. Bardziej złożone zadania Można łatwo rozwiązać za pomocą nowoczesnych języków dynamicznych, takich jak Python (fav lub mine) lub Ruby.

Powinieneś zdecydowanie nauczyć się dynamicznego języka skryptowego, który pomoże Ci w tak wielu zadaniach (web, admin, data crunching, automatyzacja, itp.). I dzięki temu ucząc się narzędzi na przykład awk jest całkowicie bezużyteczny, zaoszczędzi ci co najwyżej kilka sekund każdego miesiąca.

 3
Author: e-satis,
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
2016-12-20 08:03:08

Jest to przydatne głównie, jeśli musisz od czasu do czasu parsować pliki logów dla danych lub wyników programów podczas skryptów powłoki, ponieważ bardzo łatwo jest to osiągnąć w awk, że zajmie ci to trochę więcej linii kodu w Pythonie.

Z pewnością ma więcej mocy niż to, ale wydaje się, że jest to zadanie, do którego większość ludzi go używa.

 2
Author: NeuroSys,
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-09-20 08:32:58

Oczywiście: pracuję w środowisku, w którym jedynymi dostępnymi językami są: (jakiś język shity, który generuje COBOL, OMG, OMG), bash (stara wersja), perl (jeszcze go nie opanowałem), sed, awk i inne narzędzia wiersza poleceń. Znajomość awk zaoszczędziła mi kilka godzin (i wygenerowała kilka zadań przetwarzania tekstu od moich kolegów-przychodzą do mnie co najmniej trzy razy dziennie).

 2
Author: Zsolt Botykai,
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-09-26 10:40:53

Powiedziałbym, że to już nie jest tego warte. Używam go od czasu do czasu jako znacznie bardziej wszechstronny edytor strumieniowy niż sed z włączonymi umiejętnościami wyszukiwania, ale jeśli jesteś biegły w Pythonie, nie znam zadania, które byłabyś w stanie ukończyć znacznie szybciej, aby zrekompensować czas potrzebny do nauki awk.

Poniższe 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 mojego Debiana / Ubuntu "systemy"): {]}

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P
 1
Author: Matthias Kestenholz,
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-09-20 08:28:16

Nie.

Chociaż może to być interesujące, możesz zrobić wszystko, co awk może zrobić za pomocą innych, bardziej wydajnych narzędzi, takich jak Perl.

Poświęć czas na naukę tych potężniejszych narzędzi - i tylko nawiasem mówiąc, podnieś trochę awk po drodze.

 1
Author: Ed Guiness,
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-09-20 08:31:50

Powiedziałbym, że jest. Jeśli chodzi o proste rzeczy, AWK jest o wiele łatwiejszy dla niedoświadczonego programisty sysadmina niż Pythona. Możesz nauczyć się trochę AWK i robić wiele rzeczy, nauka Pythona oznacza naukę zupełnie nowego języka(tak, Wiem, że AWK to język to też sens).

Perl może być w stanie zrobić wiele rzeczy, które AWK może zrobić, ale oferując wybór w dzisiejszych czasach wybrałbym Pythona tutaj. Więc tak, powinieneś nauczyć się AWK. ale ucz się też Pythona: -)

 1
Author: wzzrd,
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-11-12 16:49:14

Awk ma bardzo dobry stosunek utility / trudność,a "simple awk" działa w każdym Unix/Linux / MacOS (i może być zainstalowany również w innych systemach).

Został zaprojektowany w złotym wieku, kiedy ludzie nienawidzili pisania, więc skrypty mogą być bardzo krótkie i szybkie do napisania. Postaram się zainstalować mawk, szybką wersję, podobno przyspiesza obliczenia około 9 razy, awk / gawk jest raczej wolny, więc jeśli chcesz go użyć zamiast R itp. możesz chcieć mawk.

 1
Author: BongBong Chu,
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
2016-12-16 16:02:11

Teraz, gdy PERL został przeniesiony na prawie każdą znaczącą platformę, powiedziałbym, że nie jest tego wart. Jest bardziej wszechstronny niż sed i awk razem. Jeśli chodzi o automatyczne dzielenie, możesz to zrobić w Perlu w następujący sposób:

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

EDIT: nadal możesz chcieć zapoznać się nieco z awk, ponieważ niektóre inne narzędzia opierają się na jego filozofii działań opartych na wzorcach (np. DTrace na Solarisie).

 0
Author: zvrba,
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-09-26 11:24:57

Pracuję w obszarze pliki są w formacie kolumny. Więc awk jest dla mnie nieocenione, aby sformatować plik tak, aby różne programy mogły ze sobą współpracować. Dla osób spoza branży IT korzystanie z awk jest wystarczające i doskonałe. Obecnie prędkość komputera nie jest problemem, więc mogę połączyć awk & unix, aby połączyć wiele poleceń 1 linerów w "skrypt". Z awk search by field and record, używam go do szybkiego sprawdzania danych pliku, zamiast "vi", aby otworzyć plik. Muszę powiedzieć, że zdolność awk przyniosła radość mojej pracy szczególnie, jestem potrafi pomóc współpracownikowi szybko uporządkować sprawy za pomocą awk. Niesamowity kod.

 0
Author: Hai Truong,
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-04-26 02:59:15

Ostatnio próbowałem zwizualizować sieciowe pliki pcap rejestrujące atak DOS, który wyniósł ponad 20gbs. Potrzebowałem znacznika czasu i adresów Ip. W moim scenariuszu, AWK one-liner działał bajecznie i dość szybko. Specjalnie użyłem AWK, aby wyczyścić wyodrębnione pliki, uzyskać adresy ip i całkowitą liczbę pakietów z tych adresów IP w pogrupowanym przedziale czasu. Całkowicie zgadzam się z tym, co inni napisali powyżej. To zależy od twoich potrzeb.

 0
Author: Ayush,
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-08-20 21:13:58

awk jest językiem powertool, więc prawdopodobnie znajdziesz awk używany gdzieś, jeśli jesteś informatykiem jakiegokolwiek rodzaju. Jeśli potrafisz obsługiwać składnię i wyrażenia regularne grep i sed to nie powinieneś mieć problemu z pobieraniem awk i prawdopodobnie warto.

Gdzie znalazłem awk naprawdę shine jest w uproszczeniu rzeczy, takich jak przetwarzanie rekordów wielowierszowych i zniekształcanie/interpolowanie wielu plików jednocześnie.

 0
Author: ,
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
2015-08-03 23:31:57

Jednym z powodów, aby nie uczyć się awk jest to, że nie ma nie chciwych dopasowań w wyrażeniach regularnych.

Mam kod awk, który teraz muszę przepisać tylko dlatego, że nagle debugowałem, że nie ma czegoś takiego jak nie chciwe dopasowania w awk / gawk, więc nie może poprawnie wykonać niektórych wyrażeń regularnych.

 0
Author: user619271,
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
2017-07-17 06:45:46

To zależy od twoich kolegów z drużyny i lidera i zadania, nad którym pracujesz.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even java
    }
  }else{
    do as they ask
  }
}
 0
Author: Kenneth,
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
2018-04-14 04:52:11