gawk

Autres langues

Langue: pl

Autres versions - même langue

Version: 29 maja 2001 (openSuse - 09/10/07)

Section: 1 (Commandes utilisateur)

NAZWA

gawk - jêzyk wyszukiwania i przetwarzania wzorców.

SK£ADNIA

gawk
[opcje w stylu POSIX lub GNU] -f plik-programu [--] plik...
gawk
[opcje w stylu POSIX lub GNU] [--] tekst-programu plik...
pgawk
[opcje w stylu POSIX lub GNU] -f plik-programu [--] plik...
pgawk
[opcje w stylu POSIX lub GNU] [--] tekst-programu plik...

OPIS

Gawk jest implementacj± GNU jêzyka programowania AWK. Odpowiada on definicji tego jêzyka z POSIX 1003.2 Command Language And Utilities Standard. Wersja ta jest z kolei oparta na opisie z The AWK Programming Language, napisanym przez Aho, Kernighana i Weinbergera, z dodatkowymi w³a¶ciwo¶ciami, zdefiniowanymi w wersji awk z SysVR4. Gawk udostêpnia równie¿ naj¶wie¿sze rozszerzenia awk z Bell Laboratories oraz parê rozszerzeñ specyficznych dla GNU.

Pgawk jest profiluj±c± wersj± gawk. W ka¿dym aspekcie jest identyczny z gawk, z wyj±tkiem tego, ¿e programy dzia³aj± wolniej, a na zakoñczenie automatycznie tworzony jest profil wykonania w pliku awkprof.out. Zobacz opcja --profile, poni¿ej.

Wiersz poleceñ sk³ada siê z opcji dla gawk, tekstu programu (je¶li nie podano go poprzez opcjê -f lub --file) i warto¶ci, które maj± byæ udostêpnione w predefiniowanych zmiennych ARGC i ARGV.

OPCJE

Opcje gawk mog± byæ zarówno tradycyjnymi POSIX-owymi jednoliterowymi opcjami, jak i d³ugimi opcjami w stylu GNU. Opcje POSIX-owe zaczynaj± siê pojedynczym ``-'', a opcje GNU ``--''. Opcje w stylu GNU s± udostêpniane zarówno dla w³a¶ciwo¶ci specyficznych dla GNU, jak i dla w³a¶ciwo¶ci POSIX-owych. Inne implementacje AWK prawdopodobnie jednak bêd± przyjmowaæ tylko tradycyjne, jednoliterowe opcje.

Zgodnie ze standardem POSIX, specyficzne dla gawk opcje s± przekazywane przez argumenty opcji -W. Mo¿na podaæ wiele opcji -W, lub wiele jej argumentów (oddzielonych przecinkami, lub ujêtych w cudzys³owy i oddzielonych bia³ymi spacjami). Wielko¶æ liter w argumentach przekazanych opcji -W jest ignorowana. Ka¿da opcja -W ma odpowiadaj±ca sobie d³ug± opcjê w stylu GNU, jak opisano ni¿ej. Argumenty przekazywane d³ugim opcjom w stylu GNU s± ³±czone z opcj± przy u¿yciu znaku =, bez dodatkowych spacji lub przekazywane w nastêpnym argumencie wiersza poleceñ (tj. bez znaku równo¶ci i po spacji).

Gawk przyjmuje nastêpuj±ce, wymienione alfabetycznie, opcje.

-F fs
--field-separator=fs U¿ywa fs jako wej¶ciowego separatora pola (warto¶æ predefiniowanej zmiennej FS).
-v var=val
--assign=var=val Przyznaje zmiennej var warto¶æ val. Robi to przed uruchomieniem programu. Takie warto¶ci zmiennych s± dostêpne dla bloku BEGIN programu AWK.
-f plik-programu
--file=plik-programu Odczytaj ¼ród³o programu AWK z pliku plik-programu, zamiast odczytywaæ go z pierwszego argumentu wiersza poleceñ. Mo¿na u¿yæ wielu opcji -f (lub --file).
-mf=NNN
-mr=NNN
Ustaw limity pamiêci na warto¶æ NNN. Flaga f ustawia maksymaln± liczbê pól, a flaga r ustawia maksymalny rozmiar rekordu. Te dwie flagi i opcja -m pochodz± z wersji AT&T Bell Laboratories research UNIX awk. S± one ignorowane w gawk, gdy¿ nie posiada on predefiniowanych limitów.
-W compat
-W traditional
--compat
--traditional Pracuje w trybie zgodno¶ci. W trybie tym, gawk zachowuje siê identycznie z UNIX awk; nie jest rozpoznawane ¿adne ze specyficznych dla GNU rozszerzeñ. Postaæ --traditional jest preferowana. Zobacz ROZSZERZENIA GNU, dla dalszych informacji.
-W copyleft
-W copyright
--copyleft
--copyright Wypisuje krótk± wersjê informacji o kopiowaniu (na standardowe wyj¶cie).
-W dump-variables[=plik]
--dump-variables[=plik] Wypisuje do pliku posortowan± listê zmiennych globalnych, ich typoów i koñcowych warto¶ci. Je¶li nie podano pliku, to gawk u¿ywa pliku o nazwie awkvars.out w katalogu bie¿±cym.

Lista wszystkich zmiennych globalnych to dobry sposób na wyszukanie b³êdów typograficznych w programach. Mo¿e siê te¿ przydaæ, gdy masz wielki program z mnóstwem funkcji a chcesz siê upewniæ, ¿e nie u¿ywaj± one przypadkiem ze zmiennych globalnych, które uwa¿asz za lokalne. (Szczególnie ³atwo pomyliæ siê przy prostych nazwach zmiennych, jak i, j, i tak dalej.)

-W help
-W usage
--help
--usage Wypisuje na standardowe wyj¶cie krótkie podsumowanie dostêpnych opcji. (Zgodnie z GNU Coding Standards, te opcje powoduj± natychmiastowe, pomy¶lne zakoñczenie pracy).
-W lint[=fatal]
--lint[=fatal] Daje ostrze¿enia o konstrukcjach, które s± pokraczne lub nieprzeno¶ne dla innych implementacji AWK. Z opcjonalnym argumentem fatal, ostrze¿enia lint staj± siê b³êdami krytycznymi. Mo¿e to drastyczne, ale korzystanie z tej opcji na pewno zachêci do pisania czystszych programówr AWK.
-W lint-old
--lint-old Daje ostrze¿enia o konstrukcjach, które nieprzeno¶ne na pierwotn± wersjê Uniksowego awk.
-W gen-po
--gen-po Przegl±da i analizuje program AWK program, i tworzy na standardowym wyj¶ciu plik formatu GNU .po, zawieraj±cy wpisy dla wszystkich podlegaj±cych lokalizacji ³añcuchów w programie. Sam program nie jest wykonywany. Wiêcej szczegó³ów o plikach .po mo¿na znale¼æ w pakiecie dystrybucyjnym GNU gettext.
-W non-decimal-data
--non-decimal-data Rozpoznaje warto¶ci ósemkowe i szesnastkowe w danych wej¶ciowych. U¿ywaj tej opcji ze szczególn± ostro¿no¶ci±!
-W posix
--posix W³±cza tryb zgodno¶ci, w którym obowi±zuj± nastêpuj±ce dodatkowe ograniczenia:
*
sekwencje specjalne \x nie s± rozpoznawane.
*
Przy FS ustawionym na pojedyncz± spacjê jako separatory pól dzia³aj± tylko spacje i tabulatory, znaki nowej linii nie s± separatorami pól.
*
Nie mo¿na kontynuowaæ linii po ? i :.
*
Synonim `func' dla s³owa kluczowego `function' nie jest rozpoznawany.
*
Operatory ** i **= nie mog± byæ u¿ywane zamiast ^ i ^=.
*
Nie jest dostêpna funkcja fflush().
-W profile[=plik_prof]
--profile[=plik_prof] Wysy³a dane profilowania do pliku_prof. Domy¶lnie jest to awkprof.out. Uruchomiony z gawk, profil jest tylko ``³adnie wypisan±'' wersj± programu. Uruchomiony z pgawk, profil zawiera liczbê wykonañ ka¿dej instrukcji programu (na lewym marginesie) oraz liczbê wywo³añ funkcji dla ka¿dej funkcji u¿ytkownika.
-W re-interval
--re-interval W³±cz u¿ycie wyra¿eñ powtarzanych (interval expressions) w dopasowywaniu wyra¿eñ regularnych (patrz poni¿ej Wyra¿eniaregularne). Wyra¿enia powtarzane nie by³y tradycyjnie dostêpne w jêzyku AWK. Standard POSIX doda³ je dla uzyskania wzajemnej zgodno¶ci awk i egrep. Jednak ich u¿ycie najprawdopodobniej da b³êdy w starych programach AWK, zatem gawk udostêpnia je tylko wtedy, gdy za¿±dano tego niniejsz± opcj± lub podano opcjê --posix.
-W source=tekst-programu
--source=tekst-programu U¿ywa tekst-programu jako kodu ¼ród³owego programu AWK. Opcja ta pozwala na ³atwe ³±czenie funkcji bibliotecznych (u¿ywanych poprzez opcje -f i --file) z kodem ¼ród³owym wprowadzanym w wierszu poleceñ. Jest to przeznaczone przede wszystkim dla ¶rednio du¿ych programów AWK, u¿ywanych w skryptach pow³okowych.

Forma -W source= tej opcji u¿ywa reszty argumentu wiersza poleceñ jako tekstu programu; dalsze opcje -W nie bêd± rozpoznawane w tym samym argumencie.

-W version
--version Wypisuje informacjê o wersji tej konkretnej kopii gawk (na standardowe wyj¶cie). Jest to przydatne przede wszystkim do zdobywania informacji, czy bie¿±ca kopia gawk, któr± posiadasz na systemie jest aktualna. Przydaje siê tak¿e przy zg³aszaniu b³êdów. (Wed³ug GNU Coding Standards (Standardów Kodowania GNU), opcje te powoduj± natychmiastowe, zakoñczone powodzeniem zakoñczenie pracy.)
-- Sygnalizuje koniec opcji. Dziêki temu nastêpne argumenty programu AWK mog± rozpoczynaæ siê my¶lnikiem ``-''. [Na przyk³ad rozpoczynaj±ce siê my¶lnikiem nazwy plików]. Istnieje g³ównie dla utrzymania spójno¶ci z konwencj± przetwarzania argumentów u¿ywan± w wiêkszo¶ci programów POSIX-owych.

W trybie zgodno¶ci wszelkie inne opcje s± zaznaczane jako niepoprawne, lecz poza tym s± ignorowane. W normalnym trybie dzia³ania, je¶li dostarczono tekst programu AWK, nieznane opcje s± mu przekazywane w tablicy ARGV, aby móg³ je sobie sam przetworzyæ. Przydaje siê to w praktyce do uruchamiania programów AWK przez mechanizm ``#!'' interpretera.

WYWO£ANIE PROGRAMU AWK

Program AWK sk³ada siê z sekwencji instrukcji wzorzec-akcja oraz opcjonalnych definicji funkcji.


wzorzec        { instrukcje akcji }

function nazwa(lista parametrów) { instrukcje }

Gawk najpierw odczytuje ¼ród³o programu z podanych plików-programu. Gawk czyta tekst programu tak, jakby wszystkie pliki-programu zosta³y po³±czone ze sob± w ca³o¶æ. Przydaje siê do budowania bibliotek funkcji AWK, bez konieczno¶ci w³±czania ich do ka¿dego nowego programu AWK, który z nich korzysta. Umo¿liwia to równie¿ ³±czenie funkcji bibliotecznych z programami z wiersza poleceñ.

Zmienna ¶rodowiskowa AWKPATH okre¶la ¶cie¿kê przeszukiwania, u¿ywan± do znajdowania plików ¼ród³owych podanych w opcji -f. Je¶li zmienna ta nie istnieje, domy¶ln± ¶cie¿k± staje siê ".:/usr/local/share/awk". (Faktyczny katalog mo¿e byæ ró¿ny, zale¿nie od tego jak skompilowano i zainstalowano awk.) Je¶li nazwa pliku, podana opcji -f zawiera znak ``/'', nie jest dokonywane ¿adne przeszukiwanie ¶cie¿ki.

Gawk wywo³uje programy AWK w nastêpuj±cej kolejno¶ci. Najpierw dokonuje wszelkich inicjalizacji zmiennych, zadanych w opcjach -v. Nastêpnie kompiluje program do postaci wewnêtrznej. Potem wywo³uje kod, zawarty w blokach BEGIN (je¶li istniej±), a nastêpnie zaczyna odczytywaæ ka¿dy z plików, podanych w tablicy ARGV. Je¶li nie podano takich nazw plików, gawk odczytuje standardowe wej¶cie.

Je¶li nazwa pliku w wierszu poleceñ ma postaæ var=val , to jest traktowana jako inicjalizacja zmiennej. Zmienna var uzyska warto¶æ val. (Dzieje siê to po uruchomieniu ka¿dego bloku BEGIN.) Ten sposób inicjalizowania zmiennych najbardziej przydaje siê do dynamicznego nadawania warto¶ci zmiennym, których AWK u¿ywa do okre¶lania sposobu, w jaki wej¶cie rozbijane jest na pola i rekordy. Jest te¿ u¿yteczny do kontroli stanu, je¶li zachodzi potrzeba wielokrotnego czytania danego pliku danych.

Je¶li warto¶æ konkretnego elementu ARGV jest pusta (""), to gawk j± pomija.

Dla ka¿dego rekordu wej¶cia gawk dokonuje porównania, sprawdzaj±c czy odpowiada on jakiemu¶ wzorcowi z programu AWK. Je¶li wzorzec bêdzie odpowiada³ rekordowi, zostanie wykonana zwi±zana z nim akcja. Wzorce s± sprawdzane w kolejno¶ci ich pojawienia siê w programie.

Na koniec, gdy wyczerpane zostanie ca³e wej¶cie, gawk wywo³uje kod zawarty w bloku END.

ZMIENNE, REKORDY I POLA

Zmienne AWK s± dynamiczne; zaczynaj± istnieæ gdy s± po raz pierwszy u¿yte. Ich warto¶ci s± zmiennoprzecinkowe, znakowe (ci±gi znaków) lub jedne i drugie naraz, zale¿nie od sposobu u¿ycia. AWK posiada równie¿ tablice jednowymiarowe; symulowane mog± byæ równie¿ tablice wielowymiarowe. Podczas dzia³ania programu ustawianych jest kilka predefiniowanych zmiennych; bêd± one opisane ni¿ej.

Rekordy

Zwykle rekordy rozdzielane s± znakami nowej linii [czyli rekordem jest pojedyncza linia]. Mo¿esz kontrolowaæ sposób, w jaki bêd± separowane rekordy przypisuj±c warto¶æ wbudowanej zmiennej RS Je¿eli zawiera ona pojedynczy znak, to jest on ogranicznikiem rekordów. W przeciwnym przypadku, RS jest wyra¿eniem regularnym. Tekst wej¶ciowy pasuj±cy do tego wyra¿enia rozdziela rekord. Jednak¿e, w trybie zgodno¶ci do rozdzielania rekordów zostanie u¿yty tylko jego pierwszy znak. je¿eli RS jest ustawiony na ³añcuch pusty, to rekordy rozdzielane s± pustymi liniami. W tym przypadku znak nowej linii zawsze dzia³a jako ogranicznik pola, oprócz warto¶ci ogranicznika ustawionej przez FS.

Pola

Po przeczytaniu ka¿dego rekordu wej¶ciowego, gawk rozbija go na pola, u¿ywaj±c do tego celu warto¶ci separatora pól, FS. Je¶li FS jest pojedynczym znakiem, to pola s± rozdzielane tym w³a¶nie znakiem. W przeciwnym wypadku FS powinien byæ wyra¿eniem regularnym. W szczególnym wypadku, kiedy FS jest pojedyncz± spacj±, pola s± oddzielane dowoln± ilo¶ci± bia³ych spacji (spacji, tabulatorów, nowych linii). (Ale patrz omówienie --posix). UWAGA: Warto¶æ zmiennej IGNORECASE (patrz ni¿ej) równie¿ wp³ywa na sposób rozdzielania pól i rekordów (w wypadku gdy odpowiednio FS b±d¼ RS jest wyra¿eniem regularnym).

Je¶li zmienn± FIELDWIDTHS ustawiono na listê oddzielonych spacjami liczb, to ka¿de pole powinno mieæ sta³± szeroko¶æ, za¶ gawk dokonuje podzia³u przy u¿yciu podanych szeroko¶ci. Warto¶æ FS jest wtedy ignorowana. Przyznanie zmiennej FS nowej warto¶ci uniewa¿nia u¿ycie FIELDWIDTHS, i przywraca domy¶lne zachowanie.

Do ka¿dego pola w rekordzie wej¶ciowym mo¿na odwo³aæ siê przez jego pozycjê, $1, $2, itd. $0 jest ca³ym rekordem (zwykle lini±). Do pól nie musisz siê odwo³ywaæ przez sta³e:


n = 5
print $n

wypisze pi±te pole rekordu wej¶ciowego.

Zmienna NF jest ustawiana na ca³kowit± liczbê pól w rekordzie wej¶ciowym.

Odniesienia do pól nieistniej±cych (np. pól znajduj±cych siê za $NF) daj± ³añcuch zerowy. Jednak nadanie nieistniej±cemu polu warto¶ci (np. $(NF+2) = 5) zwiêksza warto¶æ licznika NF, a pola znajduj±ce siê `pomiêdzy', inicjuje ³añcuchem zerowym. Przypisanie to poowoduje równie¿ ponowne przetworzenie warto¶ci zmiennej $0, w której pola zostan± rozdzielone warto¶ci± OFS.

Przypisanie warto¶ci istniej±cemu polu powoduje ponowne utworzenie ca³ego rekordu podczas odwo³ania siê do $0. Podobnie, przypisanie warto¶ci do $0 powoduje, ¿e rekord jest ponownie dzielony, tworz±c nowe warto¶ci pól.

Wbudowane zmienne

Wbudowanymi zmiennymi Gawk s±:

ARGC
Liczba argumentów wiersza poleceñ (nie liczy opcji przekazanych gawk, ani ¼ród³a programu).
ARGIND
Indeks w tablicy ARGV bie¿±co przetwarzanego pliku.
ARGV
Tablica argumentów wiersza poleceñ. Tablica ta jest indeksowana od zera do ARGC - 1. Dynamiczna zmiana zawarto¶ci ARGV mo¿e sterowaæ plikami u¿ywanymi jako dane. BINMODE Na systemach nie-POSIX-owych, okre¶la u¿ycie trybu ``binarnego'' do wszystkich operacji wej¶cia/wyj¶cia plików. Numeryczne warto¶ci 1, 2 lub 3 oznaczaj±, ¿e binarne wej¶cie/wyj¶cie powinno zostaæ u¿yte dla, odpowiednio, plików wej¶ciowych, wyj¶ciowych, lub wszystkich plików. Warto¶ci ³añcuchowe: "r" lub "w" oznaczaj± u¿ywanie binarnego wej¶cia/wyj¶cia dla, ¿e plików, odpowiednio, wej¶ciowych lub wyj¶ciowych. Warto¶ci ³añcuchowe: "rw" lub "wr" oznaczaj±, ¿e binarne wej¶cie/wyj¶cie powinno byæ u¿yte dla wszystkich plików. Wszystkie inne warto¶ci ³añcuchowe s± traktowane jak "rw", ale powoduj± komunikat ostrzegawczy.
CONVFMT
Format konwersji dla liczb, domy¶lnie "%.6g".
ENVIRON
Tablica zawieraj±ca warto¶ci bie¿±cego ¶rodowiska. Tablica ta jest indeksowana zmiennymi ¶rodowiskowowymi, ka¿dy element tablicy jest warto¶ci± danej zmiennej (np. ENVIRON["HOME"] mo¿e mieæ warto¶æ /u/arnold). Zmiana tej tablicy nie wp³ynie na ¶rodowisko widziane przez programy, które gawk wywo³uje przez przekierowania lub przy u¿yciu funkcji system().
ERRNO
Je¶li pojawi siê b³±d systemowy podczas przekierowywania dla getline, podczas odczytu dla getline lub podczas close(), to ERRNO bêdzie zawieraæ ³añcuch opisuj±cy b³±d. Podlega on t³umaczeniu przy ustawieniach locale innych ni¿ angielskie.
FIELDWIDTHS
Jest rozdzielon± bia³ymi spacjami list± szeroko¶ci pól. Je¶li zmienna ta jest ustawiona, to gawk rozbija wej¶cie na pola o sta³ych szeroko¶ciach (domy¶lnie rozbija je wed³ug warto¶ci separatora FS).
FILENAME
Nazwa pliku bie¿±cego pliku wej¶ciowego. Je¶li nie podano plików w wierszu poleceñ, FILENAME przechowuje warto¶æ ``-''. Warto¶æ zmiennej FILENAME jest niezdefiniowana wewn±trz bloku BEGIN (chyba ¿e zostanie nadana przez getline).
FNR
Liczba rekordów wej¶ciowych w bie¿±cym pliku wej¶ciowym.
FS
Separator pól wej¶ciowych, domy¶lnie spacja.
IGNORECASE
Okre¶la wra¿liwo¶æ na wielko¶ci znaków w operacjach na wyra¿eniach regularnych. Je¶li zmienna IGNORECASE ma warto¶æ niezerow±, to porównywanie wzorców w regu³ach, rozdzielanie pól przez FS, rozdzielanie rekordów przez RS, dopasowywanie wyra¿eñ regularnych przez ~ i !~, oraz wbudowane funkcje gsub(), index(), match(), split() i sub(), bêd± ignorowaæ wielko¶æ liter podczas operacji na wyra¿eniach regularnych. UWAGA: Ustawienie to nie wp³ywa na indeksowanie tablic, ani na funkcjê asort().

Tak wiêc je¶li IGNORECASE nie jest równe zero, /aB/ odpowiada wszystkim nastêpuj±cym ³añcuchom -- "ab", "aB", "Ab", i "AB". Jak ze wszystkimi zmiennymi AWK, pocz±tkowa warto¶æ IGNORECASE jest zerem, wiêc operacje na wyra¿eniach regularnych s± wra¿liwe na wielko¶æ znaków. W Unixie przy ignorowaniu wielko¶ci znaków u¿ywany jest pe³ny zestaw znaków ISO-8859-1 Latin-1.

LINT
Zapewnia dynamiczne sterowanie opcj± --lint z wnêtrza programu AWK. Gdy jest prawdziwe, gawk wypisuje ostrze¿enia lint. Gdy fa³szywe -- nie wypisuje. Kiedy ma przypisan± warto¶æ ³añcuchow± "fatal", ostrze¿enia lint staj± siê b³êdami krytycznymi, dok³±dnie tak samo, jak przy --lint=fatal. Ka¿da inna warto¶æ prawdziwa wypisuje tylko ostrze¿enia.
NF
Liczba pól w bie¿±cym rekordzie wej¶ciowym.
NR
Ca³kowita liczba odczytanych do tej pory rekordów wej¶ciowych.
OFMT
Format wyj¶ciowy liczb, domy¶lnie "%.6g".
OFS
Separator pól wyj¶ciowych, domy¶lnie spacja.
ORS
Separator rekordów wyj¶ciowych, domy¶lnie nowa linia. PROCINFO Elementy tej tablicy umo¿liwiaj± dostêp do informacji o dzia³aj±cym programie AWK. W niektórych systemach w tablicy mog± istnieæ elementy od "group1" a¿ do "groupn" dla pewnego n, bêd±cego liczb± grup dodatkowych, do których nale¿y program. Do sprawdzenia tych elementów u¿yj operatora in. Na pewno s± dostêpne nastêpuj±ce elementy:
PROCINFO["egid"]
warto¶æ funkcji systemowej getegid(2).
PROCINFO["euid"]
warto¶æ funkcji systemowej geteuid(2).
PROCINFO["FS"]
"FS", je¶li dzia³a podzia³ na pola za pomoc± FS, lub "FIELDWIDTHS", je¶li dzia³a podzia³ na pola za pomoc± FIELDWIDTHS.
PROCINFO["gid"]
warto¶æ funkcji systemowej getgid(2).
PROCINFO["pgrpid"]
ID grupy procesów bie¿±cego procesu.
PROCINFO["pid"]
ID bie¿±cego procesu.
PROCINFO["ppid"]
ID procesu macierzystego dla bie¿±cego procesu.
PROCINFO["uid"]
warto¶æ funkcji systemowej getuid(2).
RS
Separator rekordów wej¶ciowych, domy¶lnie nowa linia. Je¶li RS ma warto¶æ ³añcucha zerowego, to rekordy s± oddzielane pustymi liniami. Gdy RS jest ustawiony na ³añcuch zerowy, to znak nowej linii zawsze dzia³a jak separator pola, oprócz dzia³ania jakiejkolwiek warto¶ci zmiennej FS.
RT
Zakoñczenie rekordu. Gawk ustawia RT na tekst wej¶ciowy, który pasowa³ do znaku lub wyra¿enia regularnego okre¶lonego przez RS.
RSTART
Indeks pierwszego znaku, dopasowanego funkcj± match(); 0 w przypadku braku dopasowania.
RLENGTH
D³ugo¶æ ³añcucha dopasowanego funkcj± match(); -1 w przypadku braku dopasowania.
SUBSEP
Znak, u¿ywany do separacji wielokrotnych indeksów w elementach tablicowych, domy¶lnie jest to "\034".
TEXTDOMAIN
Dziedzina tekstowa programu AWK. Stosowane od odszukania zlokalizowanych t³umaczeñ ³añcuchów znakowych programu.

Tablice

Tablice s± indeksowane wyra¿eniem, ujêtym w nawiasy kwadratowe ([ i ]). Je¶li wyra¿enie jest list± wyra¿eñ (wyra¿, wyra¿ ...) to indeks tablicy jest sklejany z warto¶ci (³añcuchowych) ka¿dego wyra¿enia, oddzielonych warto¶ci± zmiennej SUBSEP. [Uwaga: jest tak dlatego, ¿e AWK u¿ywa tablic asocjacyjnych - tak jakby s³ownikowych - nie ma tu normalnych liczbowych indeksów - indeksem mo¿e byæ cokolwiek, najczê¶ciej ³añcuch. Symulowanie tablic wielowymiarowych polega w³a¶nie na sklejaniu poszczególnych indeksów w unikalny ³añcuch -- przyp. t³um.] W³a¶ciwo¶æ ta jest u¿ywana do symulacji wielowymiarowych tablic. Na przyk³ad:

i = "A" ; j = "B" ; k = "C"
x[i, j, k] = "hello, world\n"

przypisuje ³añcuch "hello, world\n" elementowi tablicy x, o indeksie bêd±cym ³añcuchem "A\034B\034C". Wszystkie tablice w AWK s± asocjacyjne, tj. indeksowane warto¶ciami ³añcuchowymi.

Do sprawdzenia czy dana tablica posiada oczekiwany indeks [³añcuchowy], mo¿na u¿yæ operatora in, który ma zastosowanie przede wszystkim w instrukcjach if lub while.


if (val in array)

        print array[val]

Je¶li tablica posiada wielokrotne indeksy, mo¿na u¿yæ konstrukcji (i, j) in array.

Konstrukcja in mo¿e byæ równie¿ u¿yta w pêtli for do iterowania poprzez wszystkie elementy tablicy [poniewa¿ jest ona asocjacyjna, nie mo¿na jej iterowaæ przez przelecenie indeksu od zera do najwy¿szej warto¶ci - indeks mo¿e byæ tu przecie¿ dowolnym ³añcuchem - przyp. t³um.]

Element mo¿na skasowaæ z tablicy przy u¿yciu polecenia delete. Poleceniem delete mo¿na siê te¿ pos³u¿yæ do skasowania ca³ej zawarto¶ci tablicy, przez podanie jej nazwy bez indeksu.

Typy zmiennych i konwersje

Zmienne oraz pola mog± byæ liczbami (zmiennoprzecinkowymi), ³añcuchami lub jednym i drugim naraz. Interpretacja warto¶ci zmiennej zale¿y od kontekstu. Je¶li jest u¿yta w wyra¿eniu numerycznym, jest interpretowana jako liczba; je¶li jest u¿yta w wyra¿eniu ³añcuchowym, to jest traktowana jak ³añcuch.

Aby wymusiæ traktowanie zmiennej jako liczby, dodaj do niej 0; aby wymusiæ traktowanie jej jako ³añcucha, doklej do niej ³añcuch zerowy.

Podczas konwersji ³añcucha na liczbê, obróbka jest dokonywana przy u¿yciu funkcji strtod(3). Liczba jest przekszta³cana na ³añcuch przy u¿yciu warto¶ci CONVFMT jako parametru formatuj±cego dla sprintf(3), oraz warto¶ci numerycznej jako argumentu. Jednak, nawet mimo ¿e wszystkie liczby w AWK s± zmiennoprzecinkowe, warto¶ci ca³kowite s± zawsze konwertowane jak ca³kowite (integer). Tak wiêc, przy


CONVFMT = "%2.2f"

a = 12

b = a ""

zmienna b uzyskuje warto¶æ ³añcuchow± "12", a nie "12.00".

Gawk dokonuje porównañ w nastêpuj±cy sposób: Je¶li dwie warto¶ci s± numeryczne, to s± porównywane numerycznie. Je¶li jedna z warto¶ci jest numeryczna, a druga ³añcuchowa, która jest ``³añcuchem numerycznym'', to porównania s± równie¿ dokonywane numerycznie. W przeciwnym wypadku warto¶æ numeryczna jest konwertowana do ³añcucha i dokonywane jest porównanie ³añcuchowe. Dwa ³añcuchy s±, oczywi¶cie, porównywane jako ³añcuchy. Zwróæ uwagê, ¿e standard POSIX stosuje pojêcie ``³añcucha numerycznego'' wszêdzie, nawet do sta³ych ³añcuchowych. Jednak jest to oczywi¶cie nieprawid³owe i gawk tego nie robi. (Na szczê¶cie, poprawiono to w nastêpnej wersji standardu.)

Zauwa¿, ¿e sta³e znakowe, takie jak "57" nie s± ³añcuchami numerycznymi - s± one sta³ymi ³añcuchowymi. Pojêcie ``³añcuchów numerycznych'' odnosi siê wy³±cznie do pól, wej¶cia getinput, FILENAME, elementów ARGV, ENVIRON i elementów tablicy utworzonej funkcj± split() bêd±cych ³añcuchami numerycznymi. Podstawow± koncepcj± jest to, ¿e wygl±daj±ce na numeryczne dane z wej¶cia u¿ytkownika, i tylko one, s± traktowane w opisany sposób.

Niezainicjalizowane zmienne maj± warto¶æ numeryczn± zero i ³añcuchow± "" (zero lub pusty ³añcuch).

Sta³e ósemkowe i szesnastkowe

Poczynaj±c od wersji 3.1 gawk , w kodzie ¼ród³owym programów AWK mo¿na korzystaæ ze sta³ych ósemkowych i szesnastkowych w stylu jêzyka C. Na przyk³ad, ósemkowa warto¶æ 011 jest równa dziesiêtnej 9, a szesnastkowa 0x11 jest równa dziesiêtnej 17.

Sta³e ³añcuchowe

Sta³e ³añcuchowe w AWK s± sekwencjami znaków ujêtymi w cudzys³owy ("). Wewn±trz ³añcuchów rozpoznawane s± pewne sekwencje specjalne, jak w C. S± to:

\\
dos³owny odwrotny uko¶nik (backslash)
\a
znak dzwonka, ``alert''; zazwyczaj znak ASCII BEL
\b
backspace
\f
wysuw strony (form-feed)
\n
znak nowej linii (newline).
\r
powrót karetki (carriage return).
\t
tabulacja pozioma (horizontal tab).
\v
tabulacja pionowa (vertical tab).
\xcyfry hex
Znak reprezentowany przez ³añcuch cyfr szesnastkowych wystêpuj±cych po \x. Tak jak w ANSI C, wszystkie kolejne cyfry szesnastkowe uwa¿ane s± za czê¶æ sekwencji specjalnej. (Ta cecha powinna nam co¶ mówiæ o projektowaniu jêzyków przez komitety.) Np., "\x1B" jest znakiem ASCII ESC (escape).
\ddd
Znak reprezentowany przez 1-, 2- lub 3-cyfrow± sekwencjê cyfr ósemkowych. Np., "\033" jest znakiem ASCII ESC (escape).
\c
Dos³owny znak c.

Sekwencji specjalnych mo¿na te¿ u¿ywaæ wewn±trz sta³ych wyra¿eñ regularnych (np., /[ \t\f\n\r\v]/ dopasowuje bia³e znaki).

W trybie zgodno¶ci, znaki reprezentowane przez ósemkowe lub szesnastkowe sekwencje specjalne s± traktowane dos³ownie, je¶li u¿yto ich w sta³ych wyra¿eniach regularnych. Zatem, /a\52b/ jest równowa¿nikiem /a\*b/.

WZORCE I AKCJE

AWK jest jêzykiem zorientowanym liniowo. Najpierw przychodzi wzorzec, a potem akcja. Instrukcje akcji s± zawarte w nawiasach { i }. Pomin±æ mo¿na zarówno wzorzec, jak i akcjê, lecz oczywi¶cie nie obydwa te pola naraz. Je¶li pominiêto wzorzec, to akcja jest wykonywana dla ka¿dego z rekordów wej¶cia. Brakuj±ca akcja jest z kolei równowa¿na akcji

{ print }

która wypisuje ca³y rekord.

Komentarze rozpoczynaj± siê znakiem ``#'' i trwaj± a¿ do koñca linii. Do oddzielania instrukcji mo¿na u¿ywaæ pustych linii. Zwykle instrukcja koñczy siê wraz z now± lini±, jednak nie jest to regu³± w przypadku linii koñcz±cych siê na ``,'', ``{'', ``?'', ``:'', ``&&'' lub ``||''. Dla liniach koñcz±cych siê na do lub else równie¿ wyst±pi automatyczna kontynuacja instrukcji w nastêpnej linii. W innych wypadkach, linia mo¿e byæ kontynuowana przez zakoñczenie jej znakiem ``\''; w takim wypadku znak nowej linii jest ignorowany.

Wiele instrukcji mo¿na te¿ zgrupowaæ w jednej linii, oddzielaj±c je znakiem ``;''. Tyczy siê to zarówno instrukcji w czê¶ci akcji z pary wzorzec-akcja (zwyk³y przypadek), jak i do samych instrukcji wzorzec-akcja.

Wzorce

Wzorce w AWK mog± byæ jedn± z nastêpuj±cych rzeczy:

BEGIN

END

/wyra¿enie regularne/

wyra¿enie relacyjne

wzorzec && wzorzec

wzorzec || wzorzec

wzorzec ? wzorzec : wzorzec

(wzorzec)

! wzorzec

wzorzec1, wzorzec2

BEGIN i END s± dwoma specjalnymi rodzajami wzorców, które nie s± porównywane z danymi wej¶ciowymi. Czê¶ci akcji wszelkich wzorców BEGIN s± ³±czone, tak jakby wszystkie one zosta³y napisane w pojedynczym bloku BEGIN. S± one wykonywane przed rozpoczêciem odczytywania danych wej¶ciowych. Podobnie, wszelkie bloki END s± równie¿ ³±czone i wykonywane po wyczerpaniu danych wej¶ciowych. (lub po doj¶ciu do instrukcji exit.) Wzorce BEGIN i END nie mog± byæ ³±czone z innymi wzorcami w wyra¿eniach wzorcowych. Wzorcom BEGIN i END nie mo¿e brakowaæ czê¶ci definiuj±cej akcjê.

Dla wzorców /wyra¿eñ regularnych/ powi±zana instrukcja wykonywana jest dla ka¿dego rekordu wej¶ciowego, który odpowiada zadanemu wyra¿eniu regularnemu. Wyra¿enia regularne s± tymi samymi wyra¿eniami, które mo¿na spotkaæ w egrep(1), i s± podsumowane ni¿ej.

wyra¿enie relacyjne mo¿e u¿ywaæ dowolnego operatora ze zdefiniowanych w sekcji o akcjach operatorów. Ogólnie, testuj± one, czy okre¶lone pola odpowiadaj± okre¶lonym wyra¿eniom regularnym.

Operatory &&, ||, i ! s± logicznymi AND, OR i NOT, podobnie jak w jêzyku C. S± one obliczane w sposób skrócony, podobnie jak w C, i s³u¿± g³ównie do ³±czenia bardziej podstawowych wyra¿eñ wzorcowych. Podobnie jak w wiêkszo¶ci jêzyków, dla wymuszenia kolejno¶ci porównywania mo¿na u¿yæ nawiasów.

Operator ?: dzia³a podobnie jak ten sam operator w C. Je¶li pierwszy wzorzec jest prawdziwy, to do testowania u¿ywany jest nastêpny wzorzec; w przeciwnym wypadku u¿ywany jest trzeci wzorzec. Obliczany jest tylko albo drugi albo trzeci wzorzec.

Forma wzorzec1, wzorzec2 wyra¿enia jest nazywana wzorcem zakresu. Dopasowuje ona wszystkie rekordy wej¶cie, poczynaj±c od rekordu, który odpowiada wzorcowi1, a¿ do rekordu pasuj±cego do wzorzec2, w³±cznie. Nie ³±czy siê to z innymi rodzajami wyra¿eñ wzorcowych.

Wyra¿enia regularne

Wyra¿enia regularne s± rozszerzon± form± tego, co mo¿na znale¼æ w egrep. Sk³adaj± siê one z nastêpuj±cych znaków:
c
dopasowuje nie-specjalny znak c.
\c
dopasowuje dos³owny znak c.
.
dopasowuje dowolny znak w³±cznie ze znakiem nowej linii.
^
dopasowuje pocz±tek ³añcucha.
$
dopasowuje koniec ³añcucha.
[abc...]
lista znaków, dopasowuje dowolny ze znaków abc....
[^abc...]
zanegowana lista znaków, dopasowuje wszystkie znaki poza abc....
r1|r2
alternatywa: dopasowuje albo r1 albo r2.
r1r2
konkatenacja: dopasowuje r1, a nastêpnie r2.
r+
dopasowuje jeden lub wiêcej r-ów.
r*
dopasowuje zero lub wiêcej r-ów.
r?
dopasowuje zero lub jeden r.
(r)
grupowanie: dopasowuje r.
r{n}
r{n,}
r{n,m} Jedna lub dwie liczby w nawiasach klamrowych opisuj± wyra¿enie powtarzane. Je¿eli w nawiasach jest jedna liczba, to poprzedzaj±ce wyra¿enie regularne r powtarzane jest n razy. Je¿eli u¿yto dwu rozdzielonych przecinkiem liczb, to r powtarzane jest od n do m razy. Je¿eli w nawiasach jest jedna liczba, z nastêpuj±cym po niej przecinkiem to r powtarzane jest co najmniej n razy.

Wyra¿enia powtarzane dostêpne s± tylko wtedy, gdy w wierszu poleceñ u¿yto albo opcji --posix albo --re-interval.

\y
dopasowuje pusty ³añcuch na pocz±tku b±d¼ na koñcu s³owa.
\B
dopasowuje pusty ³añcuch wewn±trz s³owa.
\<
dopasowuje pusty ³añcuch na pocz±tku s³owa.
\>
dopasowuje pusty ³añcuch na koñcu s³owa.
\w
dopasowuje dowolny znak wchodz±cy w sk³ad s³ów (literê, cyfrê lub podkre¶lenie). [Nie obejmuje to, niestety polskich znaków diakrytycznych. Sekwencje dotycz±ce dopasowywania s³ów oczywi¶cie równie¿ nie uwzglêdniaj± specyficznych polskich znaków].
\W
dopasowuje dowolny znak nie wchodz±cy w sk³ad s³ów.
\`
dopasowuje pusty ³añcuch na pocz±tku bufora (³añcucha).
\'
dopasowuje pusty ³añcuch na koñcu bufora.

Sekwencje specjalne (escape sequences), które s± prawid³owe w sta³ych ³añcuchowych (patrz ni¿ej) s± równie¿ poprawne w wyra¿eniach regularnych.

Klasy znaków s± now± w³asno¶ci± wprowadzon± w standardzie POSIX. Klasa znaków jest specjaln± notacj± s³u¿±c± do opisu listy znaków posiadaj±cych szczególn± cechê. Dla danej klasy rzeczywi¶cie wystêpuj±ce w niej znaki mog± byæ ró¿ne w zale¿no¶ci od kraju i/lub u¿ywanego zestawu znaków. Na przyk³ad, pojêcie o tym, co jest znakiem alfabetu jest odmienne w USA ni¿ we Francji.

Klasa znaków dozwolona jest wy³±cznie w wyra¿eniu regularnym wewn±trz nawiasów klamrowych listy znaków. Klasy znaków sk³adaj± siê z [:, s³owa kluczowego opisuj±cego klas±, i koñcz±cego :]. POSIX definiuje nastêpuj±ce klasy znaków:

[:alnum:]
Znaki alfanumeryczne.
[:alpha:]
Znaki alfabetu.
[:blank:]
Znaki spacji lub tabulatorów.
[:cntrl:]
Znaki steruj±ce.
[:digit:]
Znaki numeryczne (cyfry).
[:graph:]
Znaki, które s± zarówno widoczne (przy wy¶wietlaniu) jak i drukowalne. (Spacja jest drukowalna, ale nie jest widoczna, podczas gdy a jest i takie, i takie.)
[:lower:]
Znaki ma³ych liter alfabetu.
[:print:]
Znaki drukowalne (znaki, które nie s± znakami steruj±cymi.)
[:punct:]
Znaki interpunkcyjne (nie bêd±ce literami, cyframi, znakami steruj±cymi ani znakami spacji).
[:space:]
Znaki spacji (takie jak zwyk³a spacja, tabulator, wysuw strony, by wymieniæ tylko kilka).
[:upper:]
Znaki du¿ych liter alfabetu.
[:xdigit:]
Znaki bêd±ce cyframi szesnastkowymi.

Na przyk³ad, przed standardem POSIX, by dopasowaæ znaki alfanumeryczne musia³by¶ napisaæ /[A-Za-z0-9]/. Je¶li twój zestaw znaków zawiera inne znaki alfabetyczne, powy¿sze ich nie dopasuje, a je¶li kolejno¶æ znaków w zestawie jest inna ni¿ w ASCII, to wyra¿enie to mo¿e nawet nie dopasowywaæ znaków alfanumerycznych ASCII. Za pomoc± POSIX-owych klas znaków, mo¿esz napisaæ /[[:alnum:]]/, i dopasowuje to wszystkie alfabetyczne i numeryczne znaki z twojego zestawu znaków.

W listach znaków mog± pojawiæ siê dodatkowe sekwencje specjalne. Dotyczy to zestawów znaków ró¿nych od ASCII, które mog± posiadaæ pojedyncze symbole (zwane elementami porównywania - collating elements) reprezentowane przez wiêcej ni¿ jeden znak, jak i kilka znaków równowa¿nych w operacjach porównywania, czy sortowania. (np. we francuskim, zwyk³e ``e'' i akcentowane (grave) e` s± równowa¿ne.)

Symbole porównywania (Collating Symbols)
Symbolem porównywania jest wieloznakowy element porównywania zawarty pomiêdzy [. a .]. Na przyk³ad, je¶li ch jest elementem porównywania, to [[.ch.]] jest wyra¿eniem regularnym dopasowuj±cym ten element porównywania, podczas gdy [ch] jest wyra¿eniem regularnym dopasowuj±cym c albo h.
Klasy równowa¿no¶ci (Equivalence Classes)
Klasa równowa¿no¶ci jest specyficzn± dla ustawieñ lokalnych nazw± dla listy równowa¿nych sobie znaków . Nazwa zawarta jest pomiêdzy [= a =]. Na przyk³ad, do reprezentacji wszystkich ``e,'' ``e`,'' and ``e`.'' mo¿ne zostaæ u¿yta nazwa e. W tym przypadku, [[=e=]] jest wyra¿eniem regularnym dopasowuj±cym dowolne z e, e', lub e`.

Cechy te s± bardzo warto¶ciowe w ustawieniach lokalnych innych ni¿ dla jêzyka angielskiego. Funkcje biblioteczne, których gawk u¿ywa do dopasowywania wyra¿eñ regularnych rozpoznaj± obecnie wy³±cznie POSIX-owych klas znaków; nie rozpoznaj± one symboli porównywania ani klas równowa¿no¶ci.

Operatory \y, \B, \<, \>, \w, \W, \` oraz \' s± specyficzne dla gawk; s± one rozszerzeniami opartymi na mo¿liwo¶ciach bibliotek wyra¿eñ regularnych GNU.

Ró¿ne opcje wiersza poleceñ kontroluj± sposób, w jaki gawk interpretuje znaki w wyra¿eniach regularnych.

Brak opcji
W przypadku domy¶lnym gawk udostêpnia wszystkie mo¿liwo¶ci wyra¿eñ regularnych POSIX oraz powy¿ej opisane operatory wyra¿eñ regularnych GNU. Nie s± jednak obs³ugiwane wyra¿enia powtarzane.
--posix
Obs³ugiwane s± tylko POSIX-owe wyra¿enia regularne, operatory GNU nie maj± swego specjalnego znaczenia. (tj., \w dopasowuje litera³ w). Dozwolone s± wyra¿enia powtarzane.
--traditional
Dopasowywane s± wyra¿enia regularne tradycyjnego uniksowego awk. Operatory GNU nie maj± swego specjalnego znaczenia, nie s± dostêpne ani wyra¿enia powtarzane ani POSIX-owe klasy znaków ([[:alnum:]] i tak dalej). Znaki opisywane przez ósemkowe lub szesnastkowe sekwencje specjalne s± traktowane dos³ownie, nawet je¶li reprezentuj± one metaznaki wyra¿eñ regularnych.
--re-interval
Pozwala na wyra¿enia powtarzane, nawet przy u¿yciu --traditional.

Akcje

Instrukcje akcji s± zawarte w nawiasach { i }. Instrukcje akcji sk³adaj± siê ze zwyczajnych instrukcji przypisania, warunków i instrukcji pêtli, które mo¿na znale¼æ w wiêkszo¶ci innych jêzyków programowania. Operatory, instrukcje steruj±cymi, a tak¿e instrukcje wej¶cia/wyj¶cia s± opracowane na podstawie tych, spotykanych w jêzyku C.

Operatory

Operatory w AWK, w kolejno¶ci malej±cego priorytetu, to

(...)
Grupowanie
$
Odniesienie siê do pola.
++ --
Inkrementuj i dekrementuj. Zarówno przedrostkowe i przyrostkowe.
^
Potêgowanie (mo¿na u¿yæ równie¿ **, oraz **= dla operatora przypisania).
+ - !
Jednoargumentowy plus, minus i logiczna negacja.
* / %
Mno¿enie, dzielenie i modulo (reszta dzielenia).
+ -
Dodawanie i odejmowanie.
odstêp
Konkatenacja (z³±czenie) ³añcuchów.
< >
<= >=
!= == Regularne operatory relacyjne.
~ !~
Dopasowanie wyra¿enia regularnego, dopasowanie zanegowane. UWAGA: Nie u¿ywaj sta³ego wyra¿enia regularnego (/foo/) po lewej stronie ~ lub !~. U¿ywaj go tylko po prawej stronie. Wyra¿enie /foo/ ~ exp ma takie samo znaczenie jak (($0 ~ /foo/) ~ exp). Nie jest to zazwyczaj rzecz, której oczekujesz.
in
Przynale¿no¶æ do tablicy.
&&
Koniunkcja logiczna AND.
||
Alternatywa logiczna OR.
?:
Wyra¿enie warunkowe z C. Ma ono postaæ wyra¿1 ? wyra¿2 : wyra¿3. Je¶li wyra¿1 jest prawdziwe, to warto¶ci± wyra¿enia jest wyra¿2, w przeciwnym wypadku jest ni± wyra¿3. Obliczane jest wy³±cznie jedno z wyra¿2 i wyra¿3.
= += -=
*= /= %= ^= Przypisanie. Obs³ugiwane jest zarówno przypisanie absolutne (zmienna = warto¶æ) jak i przypisanie operatorowe (inne formy).

Instrukcje steruj±ce

Instrukcje steruj±ce s± nastêpuj±ce:


if (warunek) instrukcja [ else instrukcja ]

while (warunek) instrukcja 

do instrukcja while (warunek)

for (wyra¿1; wyra¿2; wyra¿3) instrukcja

for (var in tablica) instrukcja

break

continue

delete tablica[indeks]

delete tablica

exit [ wyra¿enie ]

{ instrukcje }


Instrukcje I/O

Instrukcje I/O s± nastêpuj±ce:

close(plik [, jak])
Zamyka plik, potok lub proces wspó³bie¿ny (co-process). Opcjonalnego jak powinno siê u¿ywaæ wy³±cznie do zamykania jednego koñca dwukierunkowego potoku do procesu wspó³bie¿nego. Musi to byæ warto¶æ ³añcuchowa, albo "to" albo "from".
getline
Ustawia $0 z nastêpnego rekordu wej¶ciowego; ustawia NF, NR, FNR.
getline <plik
Ustawia $0 z nastêpnego rekordu pliku; ustawia NF.
getline var
Ustawia var z nastêpnego rekordu wej¶ciowego; ustawia NF, FNR.
getline var <plik
Ustawia var z nastêpnego rekordu pliku.
polecenie | getline [var]
Uruchamia przesy³anie potokiem wyj¶cia polecenia albo do $0, albo do var, jak wy¿ej.
polecenie |& getline [var]
Uruchamia polecenia jako proces wspó³bie¿ny, wysy³aj±c potokiem jego wyj¶cie albo do $0 albo do var, jak wy¿ej. Procesy wspó³bie¿ne s± rozszerzeniem gawk.
next
Koñczy przetwarzanie bie¿±cego rekordu wej¶ciowego. Nastêpnie odczytywany jest kolejny rekord wej¶ciowy i przetwarzanie rozpoczyna siê od pierwszego wzorca programu AWK. Je¶li osi±gniêto koniec danych wej¶ciowych, wykonywany jest blok END.
nextfile
Koñczy przetwarzanie bie¿±cego pliku wej¶ciowego. Nastêpny rekord wej¶ciowy zostanie odczytany z kolejnego pliku wej¶ciowego. Aktualizowane s± warto¶ci FILENAME i ARGIND, za¶ FNR jest ustawiane na 1 i przetwarzanie rozpoczyna siê od pierwszego wzorca programu AWK. Je¶li osi±gniêty zostanie koniec danych wej¶ciowych, wykonywany jest blok END.
print
Wypisuje bie¿±cy rekord. Rekord wyj¶ciowy zakoñczony jest warto¶ci± zmiennej ORS.
print lista-wyra¿eñ
Wypisuje wyra¿enia. Ka¿de wyra¿enie jest oddzielone warto¶ci± zmiennej OFS. Wyj¶ciowy rekord jest koñczony warto¶ci± zmiennej ORS.
print lista-wyra¿eñ >plik
Wypisuje wyra¿enia do pliku. Ka¿de wyra¿enie jest rozdzielone warto¶ci± zmiennej OFS. Rekord wyj¶ciowy jest zakoñczony warto¶ci± zmiennej ORS.
printf fmt, lista-wyra¿eñ
Formatuje i wypisuje.
printf fmt, lista-wyra¿eñ >plik
Formatuje i wypisuje do pliku.
system(cmd-line)
Wywo³uje polecenie systemowe cmd-line, i zwraca jego status wyj¶cia. (funkcja mo¿e nie byæ dostêpna na systemach nie POSIX-owych.)
fflush([plik])
Opró¿nia bufory zwi±zane z otwartym plikiem wynikowym lub potokiem plik. Je¶li pominiêto plik, to opró¿niane jest standardowe wyj¶cie. Je¿eli plik jest ³añcuchem pustym, to opró¿niane s± bufory wszystkich otwartych plików i potoków.

Dozwolone s± te¿ dodatkowe przekierowania wej¶cia i wyj¶cia dla print i printf.

print ... >> plik
dokleja wyj¶cie do pliku. a przekierowanie
print ... | polecenie
zapisuje do potoku.
print ... |& polecenie
wysy³a dane do procesu wspó³bie¿nego.

Polecenie getline zwraca zero na koñcu pliku, a -1 przy b³êdzie. W przypadku b³êdu, ERRNO zawiera ³añcuch opisuj±cy problem.

UWAGA: u¿ywaj±c potoku lub procesu wspó³bie¿nego do getline albo z print czy printf wewn±trz pêtli, musisz u¿yæ close() do utworzenia nowych instancji tego polecenia. AWK nie zamyka automatycznie potoków ani procesów wspó³bie¿nych gdy zwróc± one EOF.

Instrukcja printf

Wersje AWK instrukcji printf oraz funkcji sprintf() (patrz ni¿ej) przyjmuj± nastêpuj±ce formaty konwersji:

%c
Znak ASCII. Je¶li argument u¿yty z %c by³ numeryczny, to zostanie potraktowany jak znak do wypisania. W przeciwnym wypadku, argument bêdzie zrozumiany jako ³añcuch i zostanie wypisany tylko pierwszy znak tego ³añcucha.
%d, %i
liczba dziesiêtna (czê¶æ ca³kowita).
%e , %E
Liczba zmiennoprzecinkowa w postaci [-]d.ddddddE[+-]dd. Format %E u¿ywa po prostu E zamiast e.
%f
Liczba zmiennoprzecinkowa w postaci [-]ddd.dddddd.
%g , %G
U¿ywa konwersji e lub f w zale¿no¶ci od tego, która jest krótsza i pomijaj±c nieznacz±ce zera. Format %G u¿ywa E zamiast e.
%o
Liczba ósemkowa bez znaku (tak¿e ca³kowita).
%u Liczba dziesiêtna bez znaku (znów, ca³kowita).
%s
Ci±g znaków (³añcuch).
%x , %X
Liczba szesnastkowa bez znaku (ca³kowita). Format %X u¿ywa liter ABCDEF zamiast abcdef.
%%
Pojedynczy znak %; ¿aden argument nie jest konwertowany.

Miêdzy % a liter± steruj±c± mog± znale¼æ siê opcjonalne parametry dodatkowe:

n$
Oznacza u¿ycie n-tego argumentu w tym miejscu formatowania. Nosi nazwê specyfikatora pozycyjnego i jest przeznaczone g³ównie do u¿ytku w przet³umaczonych wersjach ³añcuchów formatu, nie w oryginalnym tek¶cie programu AWK. Jest to rozszerzenie gawk.
-
Wyra¿enie w swoim polu powinno byæ wyrównane do lewej.
spacja
W przypadku konwersji numerycznych, poprzed¼ warto¶ci dodatnie odstêpem, za¶ ujemne znakiem minus.
+
Znak plus, u¿yty przed modyfikatorem szeroko¶ci (patrz ni¿ej), nakazuje zawsze umieszczaæ znak liczby przy konwersjach numerycznych, nawet je¿eli formatowane dane s± dodatnie. Modyfikator + powoduje uniewa¿nienie modyfikatora spacji.
#
U¿ywa ``alternatywnej postaci'' pewnych liter steruj±cych. Dla %o, dodaje pocz±tkowe zero. Dla %x oraz %X dodaje pocz±tkowe 0x lub 0X przy niezerowych wynikach. Dla %e, %E oraz %f wynik zawsze zawiera kropkê dziesiêtn±. Dla %g i %G z wyniku nie s± usuwane koñcowe zera.
0
Pocz±tkowe 0 (zero) dzia³a jako flaga, wskazuj±ca, ¿e wynik powinien byæ uzupe³niony zerami zamiast spacji. Odnosi siê to nawet do formatów nie-numerycznych. Flaga ta dzia³a tylko wtedy, gdy pole jest szersze ni¿ warto¶æ do wypisania.
width (szeroko¶æ)
Pole powinno byæ wype³nione do tej szeroko¶ci. Zwykle pole uzupe³niane jest spacjami. Je¶li u¿yto flagi 0, to wype³nienie zostanie dokonane przy u¿yciu zer.
.prec (dok³adno¶æ)
Liczba okre¶laj±ca dok³adno¶æ, jaka ma zostaæ u¿yta przy wypisywaniu. Dla formatów %e, %E i %f, jest to liczba cyfr, jakie zostan± wypisane po kropce dziesiêtnej. Dla formatów %g i %G okre¶la maksymaln± liczb± cyfr znacz±cych. Dla formatów %d, %o, %i, %u, %x oraz %X okre¶la minimaln± liczbê cyfr do wypisania. Dla %s jest to maksymalna liczba znaków ³añcucha, jakie maj± zostaæ wypisane.

Dynamiczne w³a¶ciwo¶ci width i prec z printf() u¿ywanego w jêzyku C s± równie¿ wspierane. Znak gwiazdki * w miejscu specyfikacji zarówno width jak i prec powoduje, ¿e ich warto¶ci s± pobierane z listy argumentów, przekazywanej printf lub sprintf(). Chc±c u¿yæ specyfikatora pozycyjnego z dynamiczn± szeroko¶ci± lub dok³adno¶ci± nale¿y podaæ n$ po * w ³añcuchu formatu. Na przyk³ad, "%3$*2$.*1$s".

Specjalne nazwy plików

Podczas przekierowañ I/O przy u¿yciu print czy te¿ printf do pliku, albo przy u¿yciu getline z pliku, gawk rozpoznaje wewnêtrznie pewne specjalne nazwy plików. Te nazwy plików umo¿liwiaj± dostêp do otwartych deskryptorów plików, dziedziczonych po procesie rodzicielskim gawk'a (zazwyczaj pow³oce). Inne pliki specjalne zapewniaj± dostêp do informacji o uruchomionym procesie gawk. Z tych specjalnych nazw plików mo¿na równie¿ korzystaæ w wierszu poleceñ do okre¶lania plików danych. Te nazwy to:

/dev/stdin
Standardowe wej¶cie.
/dev/stdout
Standardowe wyj¶cie.
/dev/stderr
Standardowe wyj¶cie diagnostyczne.
/dev/fd/n
Plik zwi±zany z otwartym deskryptorem pliku n.

S± one szczególnie przydatne do komunikatów o b³êdach. Na przyk³ad:

print "Spieprzy³e¶ to!" > "/dev/stderr"

podczas gdy w przeciwnym wypadku musia³by¶ u¿yæ

print "Spieprzy³e¶ to!" | "cat 1>&2"

Poni¿szych specjalnych nazw plików mo¿na u¿ywaæ z operatorem procesu wspó³bie¿nego |& do tworzenia witrualnych po³±czeñ sieciowych TCP/IP.

/inet/tcp/lport/rhost/rport
Plik dla po³±czenia TCP/IP na lokalnym porcie lport do zdalnej maszyny rhost na zdalnym porcie rport. U¿yj portu 0, je¶li chcesz, by to system znalaz³ port.
/inet/udp/lport/rhost/rport
Podobne, lecz u¿ywa UDP/IP zamiast TCP/IP.
/inet/raw/lport/rhost/rport
Zarezerwowane do przysz³ego u¿ytku.

Inne specjalne nazwy plików zapewniaj±ce informacje o dzia³aj±cym procesie gawk. Te nazwy plików s± obecnie przestarza³e. Do uzyskania informacji, jakie podaj±, nale¿y skorzystaæ z tablicy PROCINFO . Nazwy tych plików to:

Odczytanie tego pliku zwraca PID bie¿±cego procesu. Liczba jest w postaci
dziesiêtnej i zakoñczona jest now± lini±.
/dev/ppid
Odczytanie tego pliku zwróci PID procesu rodzicielskiego. Podobnie jak wy¿ej, liczba jest dziesiêtna i zakoñczona now± lini±.
/dev/pgrpid
Odczytanie tego pliku zwróci identyfikator grupy procesów bie¿±cego procesu, zapisany w postaci dziesiêtnej i zakoñczony now± lini±.
/dev/user
Odczytanie tego pliku zwróci pojedynczy rekord, zakoñczony now± lini±. Pola s± oddzielone spacjami. $1 jest warto¶ci± wywo³ania systemowego getuid(2), $2 jest warto¶ci± wywo³ania systemowego geteuid(2), $3 jest warto¶ci± wywo³ania systemowego getgid(2), a $4 jest warto¶ci± wywo³ania systemowego getegid(2). Je¶li s± jeszcze jakie¶ dodatkowe pola, to s± to identyfikatory grup, zwrócone przez getgroups(2). W niektórych systemach mo¿e nie byæ obs³ugiwana przynale¿no¶æ do wielu grup.

Funkcje numeryczne

AWK ma nastêpuj±ce wbudowane funkcje arytmetyczne:

atan2(y, x)
zwraca arcus tangens y/x w radianach.
cos(wyra¿)
zwraca cosinus z wyra¿ w radianach.
exp(wyra¿)
funkcja wyk³adnicza.
int(wyra¿)
skraca do liczby ca³kowitej.
log(wyra¿)
funkcja logarytmu naturalnego.
rand()
zwraca liczbê losow± z przedzia³u 0 i 1.
sin(wyra¿)
zwraca sinus z wyra¿ w radianach.
sqrt(wyra¿)
pierwiastek kwadratowy.
srand([wyra¿])
U¿ywa wyra¿ jako nowego nasionka dla generatora liczb losowych. Bez podanego wyra¿, u¿ywany jest czas dnia. Warto¶æ zwracana to poprzednie nasionko generatora liczb losowych.

Funkcje ³añcuchowe

AWK ma nastêpuj±ce wbudowane funkcje ³añcuchowe:

asort(s [, d])
Zwraca liczbê elementów w ¼ród³owej tablicy s. Zawarto¶æ s jest sortowana z zastosowaniem zwyk³ych regu³ gawk do porównywania warto¶ci, za¶ indeksy posortowanych warto¶ci s azstêpowane s± kolejnymi liczbami ca³kowitymi, pocz±wszy od 1. Je¶li podano opcjonaln± tablicê docelow± d, to najpierw s jest powielana do d, a nastêpnie sortowana jest d, a indeksy tablicy ¼ród³owej s pozostaj± niezmienione.
gensub(r, s, h [, t])
w ³añcuchu docelowym t wyszukuje pod³añcuchy odpowiadaj±ce wyra¿eniu regularnemu r. Je¿eli h jest ³añcuchem zaczynaj±cym siê od g lub G, to zastêpuje wszystkie znalezione dopasowania r przez s. W przeciwnym wypadku, h jest liczb± wskazuj±c±, które z kolejnych dopasowañ r ma zostaæ zast±pione. Je¿eli nie podano t, to zamiast niego u¿ywane jest $0. Wewn±trz tekstu zastêpuj±cego s, mo¿na pos³u¿yæ siê sekwencj± \n, gdzie n jest cyfr± od 1 do 9, wskazuj±c± na tekst dopasowany przez n-te podwyra¿enie w nawiasach. Sekwencja \0 oznacza ca³y dopasowany tekst, tak samo jak znak &. W przeciwieñstwie do sub() i gsub(), jako wynik funkcji zwracany jest zmieniony ³añcuch, za¶ pierwotny ³añcuch docelowy pozostaje nie zmieniony.
gsub(r, s, t)
ka¿dy pod³añcuch, odpowiadaj±cy wyra¿eniu regularnemu r w ³añcuchu t, wymienia na ³añcuch s, i zwraca liczbê podmian. Je¶li nie podano t, u¿ywa $0. Znak & w tek¶cie zastêpuj±cym zostanie zast±piony faktycznie dopasowanym tekstem. U¿yj \& by otrzymaæ litera³ &. (Musi to byæ wpisane jako "\\&". Pe³niejsze omówienie regu³ & oraz odwrotnych uko¶ników w tek¶cie zastêpuj±cym dla funkcji sub(), gsub() i gensub() znajdziesz w pozycji GAWK: Efektywne programowanie w AWK.)
index(s, t)
zwraca indeks ³añcucha t w ³añcuchu s, lub zero, je¶li t nie zosta³o znalezione.
length(s)
zwraca d³ugo¶æ ³añcucha s lub d³ugo¶æ $0, je¶li nie podano s.
match(s, r [, a])
zwraca pozycjê w s, gdzie pojawia siê wyra¿enie regularne r. Je¶li nie podano r, zwracane jest zero. Je¶li jest jednak obecne, to dodatkowo ustawiane s± zmienne RSTART i RLENGTH. Zauwa¿, ¿e kolejno¶æ argumentów jest taka sama jak dla operatora ~: str ~ re. Je¶li podano tablicê a, to jest ona czyszczona a nastêpnie elementy od 1 do n wype³niane s± fragmentami s pasuj±cymi do odpowiednich ujêtych w nawiasy podwyra¿eñ z r. Zerowy element a zawiera fragment s dopasowany przez ca³e wyra¿enie regularne r.
split(s, a, r)
dzieli ³añcuch s na tablicê a w miejscach rozdzielonych wyra¿eniem regularnym r, i zwraca liczbê pól. Je¶li pominiêto r, zamiast niego u¿ywane jest FS. Na pocz±tku, tablica a jest czyszczona. Podzia³ odbywa siê identycznie jak opisany powy¿ej podzia³ rekordu na pola.
sprintf(fmt, lista-wyra¿)
wypisuje listê-wyra¿ wed³ug fmt, i zwraca ³añcuch wyj¶ciowy.
strtonum(str)
Bada str, i zwraca jego numeryczn± warto¶æ. Je¶li str zaczyna siê od pocz±tkowego 0, to strtonum() przyjmuje, ¿e str jest liczb± ósemkow±. Je¶li str zaczyna siê od pocz±tkowego 0x lub 0X, to strtonum() przyjmuje, ¿e str jest liczb± szesnastkow±.
sub(r, s, t)
Podobne do gsub(), lecz podmieniany jest tylko pierwszy odpowiadaj±cy pod³añcuch.
substr(s, i, n)
zwraca maksymalnie n-znakowy pod³añcuch ³añcucha s, zaczynaj±cy siê od pozycji i. Je¶li pominiêto parametr n, u¿yta zostaje reszta s.
tolower(str)
zwraca kopiê ³añcucha str, w której wszystkie wielkie litery zosta³y zast±pione ma³ymi. Nie alfabetyczne znaki pozostaj± bez zmian.
toupper(str)
zwraca kopiê ³añcucha str, w której wszystkie ma³e litery zosta³y zast±pione wielkimi. Nie alfabetyczne znaki pozostaj± bez zmian.

Funkcje czasu

Poniewa¿ jednym z podstawowych zadañ programów AWK jest przetwarzanie plików z logami, które zawieraj± informacje czasowe, gawk udostêpnia nastêpuj±ce funkcje, umo¿liwiaj±ce uzyskiwanie znaczników czasu (timestamps) i ich formatowanie.

mktime(danedaty)
Zamienia danedaty w znacznik czasu o tej postaci, co zwracana przez systime(). danedaty jest ³añcuchem postaci YYYY MM DD HH MM SS[ DST]. Zawarto¶ci± ³añcucha jest sze¶æ lub siedem liczb oznaczaj±cych odpowiednio: pe³ny rok ³±cznie ze stuleciem, miesi±c od 1 do 12, dzieñ miesi±ca od 1 do 31, godzina od 0 do 23, minuta od 0 do 59, i sekunda od 0 do 60, oraz opcjonalna flaga zmiany czasu na letni. Warto¶ci tych liczb nie musz± le¿eæ w podanych zakresach. Na przyk³ad, godzina -1 oznacza 1 godzin± przed pó³noc±. Przyjêto kalendarz gregoriañski zaczynaj±cy siê od zera, w którym rok 0 wystêpuje przed rokiem 1, a rok -1 przed rokiem 0. Zak³±da siê, ¿e czas jest podany wed³ug lokalnej strefy czasowej. Je¶li flaga czasu letniego jest dodatnia, to czas jest czasem letnim. Je¶li jest zerowa, to standardowym. Je¶li jest ujemna (domy¶lne), to mktime() próbuje ustaliæ czy dla zadanego czasu funkcjonuje czas letni. Je¶li danedaty nie zawieraj± wystarczaj±cej liczby elementów lub wyknikowy czas jest poza zakresem, to funkcja zwraca -1.
strftime(format, timestamp)
formatuje timestamp wed³ug wskazówek zawartych w zmiennej format. timestamp powinien byæ taki sam, jak ten, zwracany przez systime(). Je¶li brakuje parametru timestamp, u¿ywany jest bie¿±cy czas dnia. Je¿eli pominiêto format, to u¿ywany jest domy¶lny format równowa¿ny formatowi wyników z date(1). Zobacz specyfikacjê funkcji strftime () w ANSI C, aby zobaczyæ jakie konwersje formatów s± na pewno dostêpne. Razem z gawk dostarczana jest wersja public domain strftime(3) oraz odpowiednia strona podrêcznika man; je¶li ta wersja zosta³a u¿yta do zbudowania gawk, to wszystkie konwersje opisane na tej stronie bêd± dostêpne dla gawk.
systime()
zwraca bie¿±cy czas dnia w liczbach sekund od pocz±tku Epoki (czyli od pó³nocy UTC, 1 stycznia 1970 na systemach POSIX-owych).

Funkcje operuj±ce na bitach

Pocz±wszy od wersji 3.1 gawk, dostêpne s± poni¿sze funkcje operuj±ce na bitach. Dzia³aj± przez konwersjê warto¶ci zmiennoprzecinkowych podwójnej precyzji na ca³kowite unsigned long, wykonanie operacji, a nastêpnie konwersjê wyniku z powrotem na zmiennoprzecinkowy. Te funkcje to:
and(v1, v2)
Zwraca bitow± koniunkcjê AND warto¶ci podanych przez v1 i v2.
compl(val)
Zwraca bitowe uzupe³nienie val.
lshift(val, ile)
Zwraca warto¶æ val, przesuniêt± w lewo o ile bitów.
or(v1, v2)
Zwraca bitow± alternatywê OR warto¶ci podanych przez v1 i v2.
rshift(val, ile)
Zwraca warto¶æ val, przesuniêt± w prawo o ile bitów.
xor(v1, v2)
Zwraca bitow± alternatywê wykluczaj±c± XOR warto¶ci podanych przez v1 i v2.

Funkcje internacjonalizacji

Pocz±wszy od wersji 3.1 gawk, mo¿na u¿ywaæ wewn±trz programów AWK funkcji do t³umaczenia ³añcuchów podczas wykonania programu. Szczegó³y opisano w GAWK: Efektywne programowanie w AWK.
bindtextdomain(katalog [, domena])
Okre¶la katalog, w którym gawk szuka plików .mo, w przypadku gdy nie bêd± lub nie mog± byæ umieszczone w ,,standardowych'' miejscach (np., podczas testów). Zwraca katalog, z którym jest ,,zwi±zana'' domena.

Domy¶ln± domen± jest warto¶æ TEXTDOMAIN. Je¶li katalog jest ³añcuchem pustym (""), to bindtextdomain() zwraca bie¿±ce wi±zanie dla zadanej domeny.

dcgettext(³añcuch [, domena [, kategoria]])
Zwraca t³umaczenie ³añcucha w domenie tekstowej domena dla kategorii locale kategoria. Domy¶ln± domen± jest bie¿±ca warto¶æ TEXTDOMAIN. Domy¶ln± warto¶ci± kategorii jest "LC_MESSAGES".

Je¶li podaje siê warto¶æ kategorii, to musi to byæ ³añcuch równy jednej ze znanych kategorii locale opisanych w GAWK: Efektywne programowanie w AWK. Trzeba równie¿ podaæ domenê tekstow±. U¿yj TEXTDOMAIN, je¶li chcesz korzystaæ z bie¿±cej domeny.

FUNKCJE U¯YTKOWNIKA

Funkcje w AWK s± definiowane nastêpuj±co:
function nazwa(lista parametrów) { instrukcje }

Funkcje s± wykonywane po wywo³aniu ich z wyra¿eñ wystêpuj±cych we wzorcach lub akcjach. Do tworzenia instancji parametrów formalnych, zadeklarowanych w funkcji u¿ywane s± parametry faktyczne u¿yte w wywo³aniu funkcji. Tablice s± przekazywane przez wskazanie, inne zmienne przez warto¶æ.

Poniewa¿ funkcje pierwotnie nie by³y czê¶ci± jêzyka AWK, obs³uga zmiennych lokalnych jest trochê niezdarna: S± one deklarowana jako dodatkowe parametry w li¶cie parametrów. Konwencja polega na separowaniu zmiennych lokalnych od parametrów dodatkowymi spacjami w li¶cie parametrów. Na przyk³ad:


function  f(p, q,     a, b) {   # a i b s± lokalne

                        ..... }



/abc/   { ... ; f(1, 2) ; ... }

Lewy nawias w wywo³aniu funkcji musi wystêpowaæ bezpo¶rednio za nazw± funkcji, bez wtr±conej bia³ej spacji. Ma to na celu zapobie¿enie niejednoznaczno¶ci sk³adni z operatorem konkatenacji (³±czenia). Ograniczenie to nie odnosi siê do funkcji wbudowanych, które s± opisane powy¿ej.

Funkcje mog± wo³aæ siebie nawzajem i mog± byæ rekurencyjne. Parametry funkcji u¿ywane jako zmienne lokalne s± podczas wywo³ania funkcji inicjalizowane na ³añcuch pusty i liczbê zero. Chc±c, by funkcja zwraca³a warto¶æ nale¿y pos³u¿yæ siê sk³adni±: return wyra¿. Warto¶æ zwracana przez funkcjê jest niezdefiniowana je¶li nie podano warto¶ci zwracanej lub funkcja koñczy pracê bez jawnej instrukcji powrotu.

Je¿eli u¿yto --lint, to gawk ostrzega o wywo³aniach niezdefiniowanych funkcji podczas analizy sk³adni, a nie w czasie wykonania. Wywo³anie niezdefiniowanej funkcji w czasie wykonania powoduje b³±d krytyczny.

Zamiast s³owa function mo¿na u¿ywaæ s³owa funct.

DYNAMICZNE £ADOWANIE NOWYCH FUNKCJI

Pocz±wszy od wersji 3.1 gawk, mo¿na dynamicznie dodawaæ nowe funkcje wbudowane do pracuj±cego interpretera gawk. Dok³adne szczegó³y wykraczaj± poza zakres tej strony podrêcznika. Mo¿na je znale¼æ w GAWK: Efektywne programowanie w AWK.
extension(objekt, funkcja)
Dynamicznie do³±cza plik obiektów wspó³u¿ytkowanych o nazwie objekt, i wywo³uje funkcjê z tego obiektu, do wykonania inicjowania. Obydwa te argumenty powinny byæ podane jako ³añcuchy. Zwraca warto¶æ zwracan± przez funkcjê.

Ta funkcja jest dostarczana i dokumentowana w GAWK: Efektywne programowanie w AWK, ale wszystko dotycz±ce tej cechy mo¿e siê zmieniæ w kolejnym wydaniu. SILNIE zalecamy, by¶ nie u¿ywa³ tej funkcji do czego¶, czego nie masz zamiaru robiæ ponownie.

SYGNA£Y

pgawk przyjmuje dwa sygna³y. SIGUSR1 powoduje, ¿e zrzuca on profil i stos wywo³±ñ funkcji do pliku profilu, którym jest albo awkprof.out, albo plik podany z opcj± --profile. Nastêpnie kontynuuje dzia³anie. SIGHUP powoduje, ¿e zrzuca on profil i stos wywo³±ñ funkcji a nastêpnie koñczy pracê.

PRZYK£ADY


Wypisz i posortuj nazwy zg³oszeniowe (login) wszystkich u¿ytkowników:



        BEGIN   { FS = ":" }

                { print $1 | "sort" }



Zlicz linie w pliku:



                { nlines++ }

        END     { print nlines }



Poprzed¼ ka¿d± liniê jej numerem w pliku:



        { print FNR, $0 }



Konkatenatuj i numeruj linie (wariacja tematu):



        { print NR, $0 }


INTERNACJONALIZACJA

Sta³e ³añcuchowe s± ci±gami znaków ujêtymi w cudzys³owy. W ¶rodowiskach innych ni¿ angielskojêzyczne, mo¿liwe jest oznakowanie ³añcuchów w programie AWK jako wymagaj±cych t³umaczenia na w³±sny jêzyk narodowy. £añcuchy takie s± oznaczone w programie AWK przez pocz±tkowy znak podkre¶lenia (``_''). Na przyk³ad,

gawk 'BEGIN { print "hello, world" }'

zawsze wypisuje hello, world. Ale,

gawk 'BEGIN { print _"hello, world" }'

we Francji mo¿e wypisaæ bonjour, monde.

W tworzeniu i uruchamianiu zlokalizowanego programu AWK wyró¿nia siê kilka etapów.

1.
Dodanie akcji BEGIN przypisuj±cej warto¶æ zmiennej TEXTDOMAIN do ustawienia domeny tekstowej na nazwê skojarzon± z naszym programem.


      BEGIN { TEXTDOMAIN = "myprog" }

Umo¿liwia to gawkowi znalezienie pliku .mo zwi±zanego z programem. Be ztego kroku, gawk u¿ywa domeny tekstowej messages, która prawdopodobnie nie zawiera t³umaczeñ dla naszego programu.

2.
Oznakowanie pocz±tkowymi znakami podkre¶lenia wszystkich ³añcuchów, które powinny zostaæ przet³umaczone.
3.
Je¶li to potrzebne, u¿ycie w programie odpowiednich funkcji dcgettext() i/lub bindtextdomain().
4.
Uruchomienie gawk --gen-po -f myprog.awk > myprog.po w celu utworzenia pliku .po dla naszego programu.
5.
Zapewnienie w³a¶ciwego t³umaczenia, zbudowanie i zainstalowanie odpowiedniego pliku .mo.

Funkcje internacjonalizacji opisano szczegó³owo w GAWK: Efektywne programowanie w AWK.

ZGODNO¦Æ Z POSIX

Podstawowym celem gawk by³a zgodno¶æ ze standardem POSIX, a tak¿e zgodno¶æ z najnowszymi wersjami UNIX awk. W tym celu gawk zawiera nastêpuj±ce widzialne dla u¿ytkownika w³a¶ciwo¶ci, które nie s± opisane w ksi±¿ce o AWK, lecz s± czê¶ci± awk z Bell Laboratories (Systemu Vr4), a tak¿e s± czê¶ci± standardu POSIX.

Ksi±¿ka wskazuje, ¿e przypisanie w wierszu poleceñ zachodzi gdy awk w innym wypadku otworzy³ by argument jako plik, co nastêpuje po wykonaniu bloku BEGIN. Jednak we wcze¶niejszych implementacjach, gdy takie przypisanie pojawi³o siê przed jakimikolwiek nazwami plików, nastêpowa³o ono przed uruchomieniem bloku BEGIN. Aplikacje z czasem zaczê³y polegaæ na tej ``w³a¶ciwo¶ci''. Gdy awk zosta³ zmieniony tak, by odpowiada³ dokumentacji, dodano opcjê -v do przypisywania warto¶ci zmiennym przed wykonaniem programu, aby usatysfakcjonowaæ aplikacje, które zale¿a³y od starego zachowania. (W³a¶ciwo¶æ ta zosta³a uzgodniona miêdzy programistami Bell Laboratories i GNU).

Opcja -W, przeznaczona dla w³a¶ciwo¶ci zale¿nych od implementacji nale¿y do standardu POSIX.

Podczas przetwarzania argumentów, gawk u¿ywa specjalnej opcji ``--'', sygnalizuj±cej koniec argumentów. W trybie zgodno¶ci bêdzie ostrzega³, lecz poza tym ignorowa³ opcje niezdefiniowane. W normalnym trybie dzia³ania, argumenty takie s± przekazywane do programu AWK, aby je przetworzy³.

Ksi±¿ka o AWK nie definiuje warto¶ci zwracanej przez srand(). Wersja SVr4 UNIX awk (oraz standard POSIX) zwracaj± warto¶æ poprzedniego u¿ywanego nasionka, umo¿liwiaj±c ¶ledzenie kolejnych sekwencji liczb losowych. Dlatego srand() w gawk równie¿ zwraca poprzednio u¿ywane nasionko.

Innymi nowymi w³a¶ciwo¶ciami s±: u¿ywanie wielu opcji -f (z MKS awk), tablica ENVIRON, sekwencje specjalne \a oraz \v (opracowane oryginalnie w gawk i przeniesione z powrotem do wersji Bell Laboratories); funkcje wbudowane tolower() i toupper() (z Bell Laboratories) oraz specyfikacje konwersji ANSI C w printf (zrobione pierwotnie w wersji Bell Laboratories).

W£A¦CIWO¦CI HISTORYCZNE

Istniej± dwie historyczne w³a¶ciwo¶ci AWK, obs³ugiwane przez gawk. Po pierwsze, mo¿liwe jest wywo³anie funkcji wbudowanej length() nie tylko bez argumentów, ale równie¿ bez nawiasów! Tak wiêc

a = length # ¦wiêty Algol 60, Batman!

oznacza to samo co jedno z poni¿szych


a = length()
a = length($0)

W³a¶ciwo¶æ ta jest oznaczona jako ``nieaprobowana'' w standardzie POSIX i gawk wypisuje ostrze¿enie o jej u¿yciu, o ile podano w wierszu poleceñ opcjê -W lint.

Inn± w³a¶ciwo¶ci± jest u¿ywanie instrukcji continue lub break poza cia³ami pêtli while, for lub do. Tradycyjne implementacje AWK traktowa³y takie u¿ycie jako równowa¿nik instrukcji next. Gawk realizuje ten sposób u¿ycia, je¶li podano opcjê --traditional.

ROZSZERZENIA GNU

Gawk ma kilka rozszerzeñ w stosunku do POSIX awk. S± one opisane w tej sekcji. Wszystkie rozszerzenia, które s± tu opisane mo¿na wy³±czyæ, wywo³uj±c gawk z opcj± --traditional.

Nastêpuj±ce w³a¶ciwo¶ci gawk nie s± dostêpne w wersjach POSIX awk.

*
Dla plików podanych opcj± -f nie jest wykonywane przeszukiwanie ¶cie¿ki. option. Dlatego te¿, zmienna ¶rodowiskowa AWKPATH nie jest zmienn± specjaln±.
*
Sekwencja specjalna \x (Wy³±czana przez --posix.)
*
Funkcja fflush() (Wy³±czana przez --posix.)
*
Mo¿liwo¶æ kontynuowania linii po ? i :. (Wy³±czana przez --posix.)
*
Sta³e ósemkowe i szesnastkowe w programach AWK.
*
Zmienne ARGIND, BINMODE, ERRNO, LINT, RT i TEXTDOMAIN nie s± specjalne.
*
Zmienna IGNORECASE oraz jej efekty uboczne nie s± dostêpne.
*
Zmienna FIELDWIDTHS oraz rozdzielanie o ustalonej szeroko¶ci pola.
*
Nie jest dostêpna tablica PROCINFO
*
Pos³ugiwanie siê RS jako wyra¿eniem regularnym.
*
Nie s± rozpoznawane specjalne nazwy plików dostêpne do przeadresowañ I/O.
*
Operator |& do tworzenia procesów wspó³bie¿nych.
*
Mo¿liwo¶æ wydzielania pojedynczych znaków przy u¿yciu ³añcucha pustego jako warto¶ci FS oraz jako trzeciego argumentu funkcji split().
*
U¿ycie delete array do kasowania ca³ej zawarto¶ci tablicy.
*
U¿ycie nextfile do porzucenia przetwarzania bie¿±cego pliku wej¶ciowego.
*
Opcjonalny drugi argument funkcji close().
*
Opcjonalny trzeci argument funkcji match().
*
Mo¿liwo¶æ u¿ycia specyfikatorów pozycyjnych w printf i sprintf().
Funkcje
and(), asort(), bindtextdomain(), compl(), dcgettext(), gensub(), lshift(), mktime(), or(), rshift(), strftime(), strtonum(), systime() i xor(). ! .
*
Lokalizowalne ³añcuchy.
*
Dynamiczne dodawanie nowych funkcji wbudowanych, funkcj± extension().

Ksi±¿ka o AWK nie definiuje warto¶ci zwracanej przez funkcjê close(). Zaimplementowana w Gawk funkcja close() zwraca warto¶æ z fclose(3) lub pclose(3), zale¿nie czy zamykano plik czy potok. Zwraca kod zakoñczenia procesu przy zamykaniu potoku wej¶ciowego. Warto¶ci± zwracan± jest -1 je¶li dany plik, potok czy proces wspó³bie¿ny nie by³y otwarte za pomoc± przekierowania.

Gdy gawk jest wywo³any z opcj± --traditional, je¶li argumentem fs opcji -F jest ``t'', to FS jest ustawiane na znak tabulacji. Zauwa¿, ¿e wpisanie gawk -F\t ... powoduje po prostu zacytowanie przez pow³okê znaku ``t'' i nie przesy³a ``\t'' do opcji -F. Poniewa¿ jest to raczej brzydki przypadek specjalny, nie jest to zachowanie domy¶lne. Zachowanie to nie pojawia siê równie¿ po podaniu opcji -W posix. Aby faktycznie uzyskaæ znak tabulacji jako separator pól, najlepiej pos³u¿yæ siê apostrofami jako znakami cytowania: gawk -F'\t' ....

ZMIENNE ¦RODOWISKOWE

Do podania listy katalogów przegl±danych przez gawk podczas poszukiwania plików zadanych opcjami -f i --file mo¿na pos³u¿yæ siê zmienn± ¶rodowiskow± AWKPATH.

Je¶li w ¶rodowisku istnieje zmienna POSIXLY_CORRECT to gawk zachowuje siê tak, jakby podano mu w wierszu poleceñ opcjê --posix. Je¶li podano opcjê --lint, gawk wyda ostrze¿enie o tym efekcie.

ZOBACZ TAK¯E

egrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2), getgroups(2)

The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.

GAWK: Efektywne programowanie w AWK, Edition 3.0, opublikowana przez Free Software Foundation, 2001.
[od t³um.: powy¿sza publikacja dostarczana jest razem z opisywan± wersj± programu]

B£ÊDY

Opcja -F niekoniecznie ma w³a¶ciwo¶æ przypisywania zmiennych; pozostaje tylko dla zgodno¶ci wstecznej.

Niepoprawne sk³adniowo programy z pojedynczego znaku mog± powodowaæ przepe³nienie stosu analizatora, daj±c niezbyt pomocny komunikat. Programy takie s± zaskakuj±co trudne do do analizy w ca³kiem ogólnym przypadku, a wysi³ek, by to jednak robiæ nie jest tego wart.

AUTORZY

Oryginalna wersja UNIX awk by³a opracowana i zaimplementowana przez Alfreda Aho, Petera Weinbergera i Briana Kernighana z Bell Laboratories. Brian Kernighan wci±¿ pracuje nad ni± i rozszerza j±.

Paul Rubin i Jay Fenlason, z Free Software Foundation, napisali wersjê gawk, zgodn± z oryginaln± wersj± awk, rozprowadzan± w Seventh Edition UNIX. John Woods wprowadzi³ wiele poprawek. David Trueman, z pomoc± Arnolda Robbinsa, uczyni³ gawk zgodnym z now± wersj± UNIX awk. Arnold Robbins jest bie¿±cym opiekunem projektu.

Pierwotny port pod DOS zosta³ dokonany przez Conrada Kwoka i Scotta Garfinkle. Scott Deifik jest obecnym opiekunem wersji DOS. Pat Rankin zrobi³ port na VMS, a Michal Jaegermann zrobi³ port na Atari ST. Port na OS/2 zosta³ zrobiony przez Kai Uwe Rommela, przy udziale i pomocy Darrela Hankersona. Fred Fish zapewni³ obs³ugê dla Amigi, Stephen Davies przeniesienie na Tandem, a Martin Brown na BeOS.

INFORMACJA O WERSJI

Ta strona podrêcznika man opisuje gawk, w wersji numer 3.1.0.

RAPORTY O B£ÊDACH

Je¶li znajdziesz w gawk b³±d, proszê o przes³anie listu poczt± elektroniczn± na adres bug-gnu-utils@gnu.org, z kopi± (carbon copy) na arnold@gnu.org. Proszê o za³±czenie wersji systemu operacyjnego, wersji gawk (otrzymanej z gawk --version), wersji kompilatora C, którym zosta³a skompilowana, oraz mo¿liwie ma³ego programu testowego i danych, które umo¿liwiaj± powtórzenie problemu.

Przed wys³aniem raportu o b³êdzie, zrób dwie rzeczy. Najpierw sprawd¼, czy masz najnowsz± wersjê gawk. Wiele b³êdów (zwykle subtelnych) jest poprawianych w ka¿dej nowej wersji i je¶li twoja wersja jest przedawniona, to byæ mo¿e problem jest ju¿ rozwi±zany. Po drugie, proszê, przeczytaj uwa¿nie tê stronê podrêcznika man oraz podrêczniki, aby siê upewniæ, ¿e to, co uwa¿asz za b³±d, jest nim naprawdê, a nie tylko dziwactwem w konstrukcji jêzyka.

Cokolwiek zrobisz, NIE wysy³aj zg³oszenia b³êdu na grupê dyskusyjn± comp.lang.awk. Mimo, ¿e opiekunowie projektu gawk czasami czytaj± tê grupê, wysy³anie na ni± zg³oszeñ jest drog± niepewn±. Proszê, u¿yj zamiast tego podanych wy¿ej adresów poczty elektronicznej.

PODZIÊKOWANIA

Brian Kernighan z Bell Laboratories da³ warto¶ciowe wsparcie podczas testowania i debuggowania. Dziêkujemy.

KOPIOWANIE NINIEJSZEJ DOKUMENTACJI

[Sekcja niet³umaczona z uwagi na ograniczenie zawarte w ostatnim akapicie]

Copyright © 1989, 1991-2001 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual page under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual page into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.