awk, mawk, nawk, gawk… CO?

38

Właśnie zacząłem uczyć się awk i jestem trochę zdezorientowany tymi wszystkimi wersjami. Czy jest jakaś „wersja”, którą można znaleźć we wszystkich systemach uniksowych? Na przykład zwykły vi? Czy standardowy awk obsługuje opcję -F?

Der Hochstapler
źródło

Odpowiedzi:

37

awk - najczęstszy i będzie dostępny na większości systemów uniksopodobnych, najstarszej wersji i gorszej od nowszych.

mawk - szybka implementacja AWK, której podstawa jest oparta na interpreterze bajt-kod.

nawk - podczas opracowywania języka AWK autorzy opublikowali nową wersję (stąd n - n ew awk), aby uniknąć zamieszania. Pomyśl o tym jak o Python 3.0 AWK.

gawk - w skrócie GNU awk. Jedyna wersja, w której programiści próbowali dodać obsługę i18n. Pozwolono użytkownikom pisać własne biblioteki współużytkowane w języku C, aby rozszerzyć je o własne „wtyczki”. Ta wersja jest standardową implementacją dla Linuksa, oryginalny AWK został napisany dla Uniksa v7.

Istnieją inne wersje, takie jak jawk (implementacja java), bwk (implementacja Briana W. Kernighana) i tak dalej.

John T.
źródło
3
Oryginalnego awk nie ma na żadnym dostępnym dla mnie systemie uniksowym. Często /usr/bin/awkuruchamia nawk, gawk lub BusyBox awk (podobny w zachowaniu do gawk).
dubiousjim
10
Pod koniec 2012 r. Systemy Ubuntu / Debian domyślnie instalują mawk. Wiersz poleceń file /etc/alternatives/awkpowracasymbolic link to /usr/bin/mawk
Mike Sherrill „Cat Recall”
czy MAWK ma wszystkie funkcje GAWK, takie jak prawdziwe tablice wielowymiarowe?
WYSIWYG,
2
@JordonBedwell Tak .. Istnieją: powtórzenia wyrażeń regularnych w mawk. Nie obsługuje również tablic wielowymiarowych.
WYSIWYG,
1
@dubiousjim Ubuntu ma original-awk w repozytorium wszechświatów.
jarno
6

Możesz po prostu użyć awk. Jest zdefiniowany przez POSIX i dlatego musi istnieć we wszystkich systemach zgodnych z POSIX.

Ten -Fparametr jest również przez to upoważniony .

Joey
źródło
1
... ale sprawdź standard, aby dowiedzieć się, czego możesz użyć, aby zapewnić zgodność z inną wersją. Na przykład nie używaj gensub(), testuj za pomocą awk-> gawki myślę, że dobrze jest iść ...
dmckee
1
@dmckee, możesz użyć, gawk --posixaby gawk działał zgodnie ze standardem POSIX. Sprawdza również, czy skrypt jest zgodny ze standardem. Możesz używać awk --posix '' 2>/dev/nullw Ubuntu bez względu na to, czy gawk, mawk lub original-awk jest używany jako awk, ale opcja posix jest rozpoznawana tylko przez gawk. --posix musi być ostatnią opcją dla original-awk. Możesz użyć awk -W posix ''z gawk i mawk.
jarno
1
@dmckee, och mawk --posix ''nie powiedzie się, jeśli użyjesz mawk 1.3.3, ale powiedzie się komunikat o błędzie, jeśli użyjesz mawk 1.3.4
jarno
1

awkbędzie działał na prawie każdym * systemie opartym na NIX, ale dokładna specyfikacja obsługiwanych przez niego urządzeń zmieni się nieznacznie, ponieważ jest to całkowicie możliwe, po prostu zostanie dowiązany do innej wersji, podobnej do tego, jak /bin/shczęsto jest powiązany z określoną powłoką, często bashlub jedną z jego pochodne. (Dla przypomnienia, znam też wiele maszyn, do których vijest również dowiązany symbolicznie vim).

Matthew Scharley
źródło
Nie zawsze musi być symlinkowany; czasami jest to mocno powiązane.
dubiousjim
0

Strona AWK Wikipedii jest dobrym źródłem informacji dla początkujących do zrozumienia AWK. Pole Separator opcja „ ” jest obsługiwana we wszystkich wariantach AWK - AFAIK.
-F

nik
źródło