Provided by:
manpages-pl_20060617-3_all 
NAZWA
gawk - jzyk wyszukiwania i przetwarzania wzorcow.
SK/LADNIA
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 jzyka programowania AWK. Odpowiada on
definicji tego jzyka 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 wlaciwociami, zdefiniowanymi w wersji awk z SysVR4. Gawk
udostpnia rownie najwiesze rozszerzenia awk z Bell Laboratories oraz
par rozszerze specyficznych dla GNU.
Pgawk jest profilujc wersj gawk. W kadym aspekcie jest identyczny z
gawk, z wyjtkiem tego, e programy dzialaj wolniej, a na zakoczenie
automatycznie tworzony jest profil wykonania w pliku awkprof.out.
Zobacz opcja --profile, poniej.
Wiersz polece sklada si z opcji dla gawk, tekstu programu (jeli nie
podano go poprzez opcj -f lub --file) i wartoci, ktore maj by
udostpnione w predefiniowanych zmiennych ARGC i ARGV.
OPCJE
Opcje gawk mog by zarowno tradycyjnymi POSIX-owymi jednoliterowymi
opcjami, jak i dlugimi opcjami w stylu GNU. Opcje POSIX-owe zaczynaj si
pojedynczym "-", a opcje GNU "--". Opcje w stylu GNU s udostpniane
zarowno dla wlaciwoci specyficznych dla GNU, jak i dla wlaciwoci POSIX-
owych. Inne implementacje AWK prawdopodobnie jednak bd przyjmowa tylko
tradycyjne, jednoliterowe opcje.
Zgodnie ze standardem POSIX, specyficzne dla gawk opcje s przekazywane
przez argumenty opcji -W. Mona poda wiele opcji -W, lub wiele jej
argumentow (oddzielonych przecinkami, lub ujtych w cudzyslowy i
oddzielonych bialymi spacjami). Wielko liter w argumentach
przekazanych opcji -W jest ignorowana. Kada opcja -W ma odpowiadajca
sobie dlug opcj w stylu GNU, jak opisano niej. Argumenty przekazywane
dlugim opcjom w stylu GNU s lczone z opcj przy uyciu znaku =, bez
dodatkowych spacji lub przekazywane w nastpnym argumencie wiersza
polece (tj. bez znaku rownoci i po spacji).
Gawk przyjmuje nastpujce, wymienione alfabetycznie, opcje.
-F fs
--field-separator=fs
Uywa fs jako wejciowego separatora pola (warto predefiniowanej
zmiennej FS).
-v var=val
--assign=var=val
Przyznaje zmiennej var warto val. Robi to przed uruchomieniem
programu. Takie wartoci zmiennych s dostpne dla bloku BEGIN
programu AWK.
-f plik-programu
--file=plik-programu
Odczytaj rodlo programu AWK z pliku plik-programu, zamiast
odczytywa go z pierwszego argumentu wiersza polece. Mona uy
wielu opcji -f (lub --file).
-mf=NNN
-mr=NNN
Ustaw limity pamici na warto NNN. Flaga f ustawia maksymaln
liczb pol, 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 limitow.
-W compat
-W traditional
--compat
--traditional
Pracuje w trybie zgodnoci. 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 krotk wersj informacji o kopiowaniu (na standardowe
wyjcie).
-W dump-variables[=plik]
--dump-variables[=plik]
Wypisuje do pliku posortowan list zmiennych globalnych, ich
typoow i kocowych wartoci. Jeli nie podano pliku, to gawk uywa
pliku o nazwie awkvars.out w katalogu biecym.
Lista wszystkich zmiennych globalnych to dobry sposob na
wyszukanie bldow typograficznych w programach. Moe si te
przyda, gdy masz wielki program z mnostwem funkcji a chcesz si
upewni, e nie uywaj one przypadkiem ze zmiennych globalnych,
ktore uwaasz za lokalne. (Szczegolnie latwo pomyli si przy
prostych nazwach zmiennych, jak i, j, i tak dalej.)
-W help
-W usage
--help
--usage
Wypisuje na standardowe wyjcie krotkie podsumowanie dostpnych
opcji. (Zgodnie z GNU Coding Standards, te opcje powoduj
natychmiastowe, pomylne zakoczenie pracy).
-W lint[=fatal]
--lint[=fatal]
Daje ostrzeenia o konstrukcjach, ktore s pokraczne lub
nieprzenone dla innych implementacji AWK. Z opcjonalnym
argumentem fatal, ostrzeenia lint staj si bldami krytycznymi.
Moe to drastyczne, ale korzystanie z tej opcji na pewno zachci
do pisania czystszych programow AWK.
-W lint-old
--lint-old
Daje ostrzeenia o konstrukcjach, ktore nieprzenone na pierwotn
wersj Uniksowego awk.
-W gen-po
--gen-po
Przeglda i analizuje program AWK program, i tworzy na
standardowym wyjciu plik formatu GNU .po, zawierajcy wpisy dla
wszystkich podlegajcych lokalizacji lacuchow w programie. Sam
program nie jest wykonywany. Wicej szczegolow o plikach .po
mona znale w pakiecie dystrybucyjnym GNU gettext.
-W non-decimal-data
--non-decimal-data
Rozpoznaje wartoci osemkowe i szesnastkowe w danych wejciowych.
Uywaj tej opcji ze szczeg'oln ostronoci!
-W posix
--posix
Wlcza tryb zgodnoci, w ktorym obowizuj nastpujce dodatkowe
ograniczenia:
o sekwencje specjalne \x nie s rozpoznawane.
o Przy FS ustawionym na pojedyncz spacj jako separatory pol
dzialaj tylko spacje i tabulatory, znaki nowej linii nie s
separatorami pol.
o Nie mona kontynuowa linii po ? i :.
o Synonim `func' dla slowa kluczowego `function' nie jest
rozpoznawany.
o Operatory ** i **= nie mog by uywane zamiast ^ i ^=.
o Nie jest dostpna funkcja fflush().
-W profile[=plik_prof]
--profile[=plik_prof]
Wysyla dane profilowania do pliku_prof. Domylnie jest to
awkprof.out. Uruchomiony z gawk, profil jest tylko "ladnie
wypisan" wersj programu. Uruchomiony z pgawk, profil zawiera
liczb wykona kadej instrukcji programu (na lewym marginesie)
oraz liczb wywola funkcji dla kadej funkcji uytkownika.
-W re-interval
--re-interval
Wlcz uycie wyrae powtarzanych (interval expressions) w
dopasowywaniu wyrae regularnych (patrz poniej
Wyraeniaregularne). Wyraenia powtarzane nie byly tradycyjnie
dostpne w jzyku AWK. Standard POSIX dodal je dla uzyskania
wzajemnej zgodnoci awk i egrep. Jednak ich uycie
najprawdopodobniej da bldy w starych programach AWK, zatem gawk
udostpnia je tylko wtedy, gdy zadano tego niniejsz opcj lub
podano opcj --posix.
-W source=tekst-programu
--source=tekst-programu
Uywa tekst-programu jako kodu rodlowego programu AWK. Opcja ta
pozwala na latwe lczenie funkcji bibliotecznych (uywanych
poprzez opcje -f i --file) z kodem rodlowym wprowadzanym w
wierszu polece. Jest to przeznaczone przede wszystkim dla
rednio duych programow AWK, uywanych w skryptach powlokowych.
Forma -W source= tej opcji uywa reszty argumentu wiersza polece
jako tekstu programu; dalsze opcje -W nie bd rozpoznawane w tym
samym argumencie.
-W version
--version
Wypisuje informacj o wersji tej konkretnej kopii gawk (na
standardowe wyjcie). Jest to przydatne przede wszystkim do
zdobywania informacji, czy bieca kopia gawk, ktor posiadasz na
systemie jest aktualna. Przydaje si take przy zglaszaniu bldow.
(Wedlug GNU Coding Standards (Standardow Kodowania GNU), opcje
te powoduj natychmiastowe, zakoczone powodzeniem zakoczenie
pracy.)
-- Sygnalizuje koniec opcji. Dziki temu nastpne argumenty programu
AWK mog rozpoczyna si mylnikiem "-". [Na przyklad rozpoczynajce
si mylnikiem nazwy plikow]. Istnieje glownie dla utrzymania
spojnoci z konwencj przetwarzania argumentow uywan w wikszoci
programow POSIX-owych.
W trybie zgodnoci wszelkie inne opcje s zaznaczane jako niepoprawne,
lecz poza tym s ignorowane. W normalnym trybie dzialania, jeli
dostarczono tekst programu AWK, nieznane opcje s mu przekazywane w
tablicy ARGV, aby mogl je sobie sam przetworzy. Przydaje si to w
praktyce do uruchamiania programow AWK przez mechanizm "#!"
interpretera.
WYWO/LANIE PROGRAMU AWK
Program AWK sklada si z sekwencji instrukcji wzorzec-akcja oraz
opcjonalnych definicji funkcji.
wzorzec { instrukcje akcji }
function nazwa(lista parametr'ow) { instrukcje }
Gawk najpierw odczytuje rodlo programu z podanych plik'ow-programu.
Gawk czyta tekst programu tak, jakby wszystkie pliki-programu zostaly
polczone ze sob w calo. Przydaje si do budowania bibliotek funkcji AWK,
bez koniecznoci wlczania ich do kadego nowego programu AWK, ktory z
nich korzysta. Umoliwia to rownie lczenie funkcji bibliotecznych z
programami z wiersza polece.
Zmienna rodowiskowa AWKPATH okrela ciek przeszukiwania, uywan do
znajdowania plikow rodlowych podanych w opcji -f. Jeli zmienna ta nie
istnieje, domyln ciek staje si ".:/usr/local/share/awk". (Faktyczny
katalog moe by rony, zalenie od tego jak skompilowano i zainstalowano
awk.) Jeli nazwa pliku, podana opcji -f zawiera znak "/", nie jest
dokonywane adne przeszukiwanie cieki.
Gawk wywoluje programy AWK w nastpujcej kolejnoci. Najpierw dokonuje
wszelkich inicjalizacji zmiennych, zadanych w opcjach -v. Nastpnie
kompiluje program do postaci wewntrznej. Potem wywoluje kod, zawarty w
blokach BEGIN (jeli istniej), a nastpnie zaczyna odczytywa kady z
plikow, podanych w tablicy ARGV. Jeli nie podano takich nazw plikow,
gawk odczytuje standardowe wejcie.
Jeli 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 kadego bloku BEGIN.) Ten sposob inicjalizowania
zmiennych najbardziej przydaje si do dynamicznego nadawania wartoci
zmiennym, ktorych AWK uywa do okrelania sposobu, w jaki wejcie
rozbijane jest na pola i rekordy. Jest te uyteczny do kontroli stanu,
jeli zachodzi potrzeba wielokrotnego czytania danego pliku danych.
Jeli warto konkretnego elementu ARGV jest pusta (""), to gawk j pomija.
Dla kadego rekordu wejcia gawk dokonuje porownania, sprawdzajc czy
odpowiada on jakiemu wzorcowi z programu AWK. Jeli wzorzec bdzie
odpowiadal rekordowi, zostanie wykonana zwizana z nim akcja. Wzorce s
sprawdzane w kolejnoci ich pojawienia si w programie.
Na koniec, gdy wyczerpane zostanie cale wejcie, gawk wywoluje kod
zawarty w bloku END.
ZMIENNE, REKORDY I POLA
Zmienne AWK s dynamiczne; zaczynaj istnie gdy s po raz pierwszy uyte.
Ich wartoci s zmiennoprzecinkowe, znakowe (cigi znakow) lub jedne i
drugie naraz, zalenie od sposobu uycia. AWK posiada rownie tablice
jednowymiarowe; symulowane mog by rownie tablice wielowymiarowe.
Podczas dzialania programu ustawianych jest kilka predefiniowanych
zmiennych; bd one opisane niej.
Rekordy
Zwykle rekordy rozdzielane s znakami nowej linii [czyli rekordem jest
pojedyncza linia]. Moesz kontrolowa sposob, w jaki bd separowane
rekordy przypisujc warto wbudowanej zmiennej RS Jeeli zawiera ona
pojedynczy znak, to jest on ogranicznikiem rekordow. W przeciwnym
przypadku, RS jest wyraeniem regularnym. Tekst wejciowy pasujcy do tego
wyraenia rozdziela rekord. Jednake, w trybie zgodnoci do rozdzielania
rekordow zostanie uyty tylko jego pierwszy znak. jeeli RS jest
ustawiony na lacuch pusty, to rekordy rozdzielane s pustymi liniami. W
tym przypadku znak nowej linii zawsze dziala jako ogranicznik pola,
oprocz wartoci ogranicznika ustawionej przez FS.
Pola
Po przeczytaniu kadego rekordu wejciowego, gawk rozbija go na pola,
uywajc do tego celu wartoci separatora pol, FS. Jeli FS jest
pojedynczym znakiem, to pola s rozdzielane tym wlanie znakiem. W
przeciwnym wypadku FS powinien by wyraeniem regularnym. W szczegolnym
wypadku, kiedy FS jest pojedyncz spacj, pola s oddzielane dowoln iloci
bialych spacji (spacji, tabulatorow, nowych linii). (Ale patrz
omowienie --posix). UWAGA: Warto zmiennej IGNORECASE (patrz niej)
rownie wplywa na sposob rozdzielania pol i rekordow (w wypadku gdy
odpowiednio FS bd RS jest wyraeniem regularnym).
Jeli zmienn FIELDWIDTHS ustawiono na list oddzielonych spacjami liczb,
to kade pole powinno mie stal szeroko, za gawk dokonuje podzialu przy
uyciu podanych szerokoci. Warto FS jest wtedy ignorowana. Przyznanie
zmiennej FS nowej wartoci uniewania uycie FIELDWIDTHS, i przywraca
domylne zachowanie.
Do kadego pola w rekordzie wejciowym mona odwola si przez jego pozycj,
$1, $2, itd. $0 jest calym rekordem (zwykle lini). Do pol nie musisz
si odwolywa przez stale:
n = 5
print $n
wypisze pite pole rekordu wejciowego.
Zmienna NF jest ustawiana na calkowit liczb pol w rekordzie wejciowym.
Odniesienia do pol nieistniejcych (np. pol znajdujcych si za $NF) daj
lacuch zerowy. Jednak nadanie nieistniejcemu polu wartoci (np. $(NF+2)
= 5) zwiksza warto licznika NF, a pola znajdujce si `pomidzy', inicjuje
lacuchem zerowym. Przypisanie to poowoduje rownie ponowne przetworzenie
wartoci zmiennej $0, w ktorej pola zostan rozdzielone wartoci OFS.
Przypisanie wartoci istniejcemu polu powoduje ponowne utworzenie calego
rekordu podczas odwolania si do $0. Podobnie, przypisanie wartoci do
$0 powoduje, e rekord jest ponownie dzielony, tworzc nowe wartoci pol.
Wbudowane zmienne
Wbudowanymi zmiennymi Gawk s:
ARGC Liczba argumentow wiersza polece (nie liczy opcji
przekazanych gawk, ani rodla programu).
ARGIND Indeks w tablicy ARGV bieco przetwarzanego pliku.
ARGV Tablica argumentow wiersza polece. Tablica ta jest
indeksowana od zera do ARGC - 1. Dynamiczna zmiana
zawartoci ARGV moe sterowa plikami uywanymi jako dane.
BINMODE Na systemach nie-POSIX-owych, okrela uycie trybu
"binarnego" do wszystkich operacji wejcia/wyjcia plikow.
Numeryczne wartoci 1, 2 lub 3 oznaczaj, e binarne
wejcie/wyjcie powinno zosta uyte dla, odpowiednio, plikow
wejciowych, wyjciowych, lub wszystkich plikow. Wartoci
lacuchowe: "r" lub "w" oznaczaj uywanie binarnego
wejcia/wyjcia dla, e plikow, odpowiednio, wejciowych lub
wyjciowych. Wartoci lacuchowe: "rw" lub "wr" oznaczaj, e
binarne wejcie/wyjcie powinno by uyte dla wszystkich
plikow. Wszystkie inne wartoci lacuchowe s traktowane jak
"rw", ale powoduj komunikat ostrzegawczy.
CONVFMT Format konwersji dla liczb, domylnie "%.6g".
ENVIRON Tablica zawierajca wartoci biecego rodowiska.
Tablica ta jest indeksowana zmiennymi
rodowiskowowymi, kady element tablicy jest wartoci
danej zmiennej (np. ENVIRON["HOME"] moe mie warto
/u/arnold). Zmiana tej tablicy nie wplynie na
rodowisko widziane przez programy, ktore gawk
wywoluje przez przekierowania lub przy uyciu funkcji
system().
ERRNO Jeli pojawi si bld systemowy podczas
przekierowywania dla getline, podczas odczytu dla
getline lub podczas close(), to ERRNO bdzie zawiera
lacuch opisujcy bld. Podlega on tlumaczeniu przy
ustawieniach locale innych ni angielskie.
FIELDWIDTHS Jest rozdzielon bialymi spacjami list szerokoci pol.
Jeli zmienna ta jest ustawiona, to gawk rozbija
wejcie na pola o stalych szerokociach (domylnie
rozbija je wedlug wartoci separatora FS).
FILENAME Nazwa pliku biecego pliku wejciowego. Jeli nie
podano plikow w wierszu polece, FILENAME przechowuje
warto "-". Warto zmiennej FILENAME jest
niezdefiniowana wewntrz bloku BEGIN (chyba e
zostanie nadana przez getline).
FNR Liczba rekordow wejciowych w biecym pliku wejciowym.
FS Separator pol wejciowych, domylnie spacja.
IGNORECASE Okrela wraliwo na wielkoci znakow w operacjach na
wyraeniach regularnych. Jeli zmienna IGNORECASE ma
warto niezerow, to porownywanie wzorcow w regulach,
rozdzielanie pol przez FS, rozdzielanie rekordow
przez RS, dopasowywanie wyrae regularnych przez ~ i
!~, oraz wbudowane funkcje gsub(), index(), match(),
split() i sub(), bd ignorowa wielko liter podczas
operacji na wyraeniach regularnych. UWAGA:
Ustawienie to nie wplywa na indeksowanie tablic, ani
na funkcj asort().
Tak wic jeli IGNORECASE nie jest rowne zero, /aB/
odpowiada wszystkim nastpujcym lacuchom -- "ab",
"aB", "Ab", i "AB". Jak ze wszystkimi zmiennymi
AWK, pocztkowa warto IGNORECASE jest zerem, wic
operacje na wyraeniach regularnych s wraliwe na
wielko znakow. W Unixie przy ignorowaniu wielkoci
znakow uywany jest pelny zestaw znakow ISO-8859-1
Latin-1.
LINT Zapewnia dynamiczne sterowanie opcj --lint z wntrza
programu AWK. Gdy jest prawdziwe, gawk wypisuje
ostrzeenia lint. Gdy falszywe -- nie wypisuje.
Kiedy ma przypisan warto lacuchow "fatal",
ostrzeenia lint staj si bldami krytycznymi, dokldnie
tak samo, jak przy --lint=fatal. Kada inna warto
prawdziwa wypisuje tylko ostrzeenia.
NF Liczba pol w biecym rekordzie wejciowym.
NR Calkowita liczba odczytanych do tej pory rekordow
wejciowych.
OFMT Format wyjciowy liczb, domylnie "%.6g".
OFS Separator pol wyjciowych, domylnie spacja.
ORS Separator rekordow wyjciowych, domylnie nowa linia.
PROCINFO Elementy tej tablicy umoliwiaj dostp do
informacji o dzialajcym programie AWK. W niektorych
systemach w tablicy mog istnie elementy od "group1"
a do "groupn" dla pewnego n, bdcego liczb grup
dodatkowych, do ktorych naley program. Do
sprawdzenia tych elementow uyj operatora in. Na
pewno s dostpne nastpujce elementy:
PROCINFO["egid"] warto funkcji systemowej
getegid(2).
PROCINFO["euid"] warto funkcji systemowej
geteuid(2).
PROCINFO["FS"] "FS", jeli dziala podzial na pola
za pomoc FS, lub "FIELDWIDTHS",
jeli dziala podzial na pola za
pomoc FIELDWIDTHS.
PROCINFO["gid"] warto funkcji systemowej
getgid(2).
PROCINFO["pgrpid"] ID grupy procesow biecego
procesu.
PROCINFO["pid"] ID biecego procesu.
PROCINFO["ppid"] ID procesu macierzystego dla
biecego procesu.
PROCINFO["uid"] warto funkcji systemowej
getuid(2).
RS Separator rekordow wejciowych, domylnie nowa
linia. Jeli RS ma warto lacucha zerowego, to
rekordy s oddzielane pustymi liniami. Gdy RS
jest ustawiony na lacuch zerowy, to znak
nowej linii zawsze dziala jak separator pola,
oprocz dzialania jakiejkolwiek wartoci
zmiennej FS.
RT Zakoczenie rekordu. Gawk ustawia RT na tekst
wejciowy, ktory pasowal do znaku lub wyraenia
regularnego okrelonego przez RS.
RSTART Indeks pierwszego znaku, dopasowanego funkcj
match(); 0 w przypadku braku dopasowania.
RLENGTH Dlugo lacucha dopasowanego funkcj match(); -1
w przypadku braku dopasowania.
SUBSEP Znak, uywany do separacji wielokrotnych
indeksow w elementach tablicowych, domylnie
jest to "\034".
TEXTDOMAIN Dziedzina tekstowa programu AWK. Stosowane
od odszukania zlokalizowanych tlumacze
lacuchow znakowych programu.
Tablice
Tablice s indeksowane wyraeniem, ujtym w nawiasy
kwadratowe ([ i ]). Jeli wyraenie jest list wyrae (wyra,
wyra ...) to indeks tablicy jest sklejany z wartoci
(lacuchowych) kadego wyraenia, oddzielonych wartoci
zmiennej SUBSEP. [Uwaga: jest tak dlatego, e AWK uywa
tablic asocjacyjnych - tak jakby slownikowych - nie ma tu
normalnych liczbowych indeksow - indeksem moe by
cokolwiek, najczciej lacuch. Symulowanie tablic
wielowymiarowych polega wlanie na sklejaniu
poszczegolnych indeksow w unikalny lacuch -- przyp.
tlum.] Wlaciwo ta jest uywana do symulacji
wielowymiarowych tablic. Na przyklad:
i = "A" ; j = "B" ; k = "C"
x[i, j, k] = "hello, world\n"
przypisuje lacuch "hello, world\n" elementowi tablicy x,
o indeksie bdcym lacuchem "A\034B\034C". Wszystkie
tablice w AWK s asocjacyjne, tj. indeksowane wartociami
lacuchowymi.
Do sprawdzenia czy dana tablica posiada oczekiwany indeks
[lacuchowy], mona uy operatora in, ktory ma zastosowanie
przede wszystkim w instrukcjach if lub while.
if (val in array)
print array[val]
Jeli tablica posiada wielokrotne indeksy, mona uy
konstrukcji (i, j) in array.
Konstrukcja in moe by rownie uyta w ptli for do
iterowania poprzez wszystkie elementy tablicy [poniewa
jest ona asocjacyjna, nie mona jej iterowa przez
przelecenie indeksu od zera do najwyszej wartoci - indeks
moe by tu przecie dowolnym lacuchem - przyp. tlum.]
Element mona skasowa z tablicy przy uyciu polecenia
delete. Poleceniem delete mona si te posluy do
skasowania calej zawartoci tablicy, przez podanie jej
nazwy bez indeksu.
Typy zmiennych i konwersje
Zmienne oraz pola mog by liczbami (zmiennoprzecinkowymi),
lacuchami lub jednym i drugim naraz. Interpretacja
wartoci zmiennej zaley od kontekstu. Jeli jest uyta w
wyraeniu numerycznym, jest interpretowana jako liczba;
jeli jest uyta w wyraeniu lacuchowym, to jest traktowana
jak lacuch.
Aby wymusi traktowanie zmiennej jako liczby, dodaj do
niej 0; aby wymusi traktowanie jej jako lacucha, doklej
do niej lacuch zerowy.
Podczas konwersji lacucha na liczb, obrobka jest
dokonywana przy uyciu funkcji strtod(3). Liczba jest
przeksztalcana na lacuch przy uyciu wartoci CONVFMT jako
parametru formatujcego dla sprintf(3), oraz wartoci
numerycznej jako argumentu. Jednak, nawet mimo e
wszystkie liczby w AWK s zmiennoprzecinkowe, wartoci
calkowite s zawsze konwertowane jak calkowite (integer).
Tak wic, przy
CONVFMT = "%2.2f"
a = 12
b = a ""
zmienna b uzyskuje warto lacuchow "12", a nie "12.00".
Gawk dokonuje porowna w nastpujcy sposob: Jeli dwie
wartoci s numeryczne, to s porownywane numerycznie. Jeli
jedna z wartoci jest numeryczna, a druga lacuchowa, ktora
jest "lacuchem numerycznym", to porownania s rownie
dokonywane numerycznie. W przeciwnym wypadku warto
numeryczna jest konwertowana do lacucha i dokonywane jest
porownanie lacuchowe. Dwa lacuchy s, oczywicie,
porownywane jako lacuchy. Zwro uwag, e standard POSIX
stosuje pojcie "lacucha numerycznego" wszdzie, nawet do
stalych lacuchowych. Jednak jest to oczywicie
nieprawidlowe i gawk tego nie robi. (Na szczcie,
poprawiono to w nastpnej wersji standardu.)
Zauwa, e stale znakowe, takie jak "57" nie s lacuchami
numerycznymi - s one stalymi lacuchowymi. Pojcie
"lacuchow numerycznych" odnosi si wylcznie do pol, wejcia
getinput, FILENAME, elementow ARGV, ENVIRON i elementow
tablicy utworzonej funkcj split() bdcych lacuchami
numerycznymi. Podstawow koncepcj jest to, e wygldajce na
numeryczne dane z wejcia uytkownika, i tylko one, s
traktowane w opisany sposob.
Niezainicjalizowane zmienne maj warto numeryczn zero i
lacuchow "" (zero lub pusty lacuch).
Sta/le 'osemkowe i szesnastkowe
Poczynajc od wersji 3.1 gawk , w kodzie rodlowym
programow AWK mona korzysta ze stalych osemkowych i
szesnastkowych w stylu jzyka C. Na przyklad, osemkowa
warto 011 jest rowna dziesitnej 9, a szesnastkowa 0x11
jest rowna dziesitnej 17.
Sta/le /lacuchowe
Stale lacuchowe w AWK s sekwencjami znakow ujtymi w
cudzyslowy ("). Wewntrz lacuchow rozpoznawane s pewne
sekwencje specjalne, jak w C. S to:
\\ doslowny odwrotny ukonik (backslash)
\a znak dzwonka, "alert"; zazwyczaj znak ASCII BEL
\b backspace
\f wysuw strony (form-feed)
\n znak nowej linii (newline).
\r powrot karetki (carriage return).
\t tabulacja pozioma (horizontal tab).
\v tabulacja pionowa (vertical tab).
\xcyfry hex
Znak reprezentowany przez lacuch cyfr szesnastkowych
wystpujcych po \x. Tak jak w ANSI C, wszystkie
kolejne cyfry szesnastkowe uwaane s za cz sekwencji
specjalnej. (Ta cecha powinna nam co mowi o
projektowaniu jzykow przez komitety.) Np., "\x1B"
jest znakiem ASCII ESC (escape).
\ddd Znak reprezentowany przez 1-, 2- lub 3-cyfrow
sekwencj cyfr osemkowych. Np., "\033" jest znakiem
ASCII ESC (escape).
\c Doslowny znak c.
Sekwencji specjalnych mona te uywa wewntrz stalych wyrae
regularnych (np., /[ \t\f\n\r\v]/ dopasowuje biale
znaki).
W trybie zgodnoci, znaki reprezentowane przez osemkowe
lub szesnastkowe sekwencje specjalne s traktowane
doslownie, jeli uyto ich w stalych wyraeniach
regularnych. Zatem, /a\52b/ jest rownowanikiem /a\*b/.
WZORCE I AKCJE
AWK jest jzykiem zorientowanym liniowo. Najpierw
przychodzi wzorzec, a potem akcja. Instrukcje akcji s
zawarte w nawiasach { i }. Pomin mona zarowno wzorzec,
jak i akcj, lecz oczywicie nie obydwa te pola naraz. Jeli
pominito wzorzec, to akcja jest wykonywana dla kadego z
rekordow wejcia. Brakujca akcja jest z kolei rownowana
akcji
{ print }
ktora wypisuje caly rekord.
Komentarze rozpoczynaj si znakiem "#" i trwaj a do koca
linii. Do oddzielania instrukcji mona uywa pustych
linii. Zwykle instrukcja koczy si wraz z now lini, jednak
nie jest to regul w przypadku linii koczcych si na ",",
"{", "?", ":", "&&" lub "||". Dla liniach koczcych si na
do lub else rownie wystpi automatyczna kontynuacja
instrukcji w nastpnej linii. W innych wypadkach, linia
moe by kontynuowana przez zakoczenie jej znakiem "\"; w
takim wypadku znak nowej linii jest ignorowany.
Wiele instrukcji mona te zgrupowa w jednej linii,
oddzielajc je znakiem ";". Tyczy si to zarowno instrukcji
w czci akcji z pary wzorzec-akcja (zwykly przypadek), jak
i do samych instrukcji wzorzec-akcja.
Wzorce
Wzorce w AWK mog by jedn z nastpujcych rzeczy:
BEGIN
END
/wyraenie regularne/
wyraenie relacyjne
wzorzec && wzorzec
wzorzec || wzorzec
wzorzec ? wzorzec : wzorzec
(wzorzec)
! wzorzec
wzorzec1, wzorzec2
BEGIN i END s dwoma specjalnymi rodzajami wzorcow, ktore
nie s porownywane z danymi wejciowymi. Czci akcji
wszelkich wzorcow BEGIN s lczone, tak jakby wszystkie one
zostaly napisane w pojedynczym bloku BEGIN. S one
wykonywane przed rozpoczciem odczytywania danych
wejciowych. Podobnie, wszelkie bloki END s rownie lczone
i wykonywane po wyczerpaniu danych wejciowych. (lub po
dojciu do instrukcji exit.) Wzorce BEGIN i END nie mog
by lczone z innymi wzorcami w wyraeniach wzorcowych.
Wzorcom BEGIN i END nie moe brakowa czci definiujcej
akcj.
Dla wzorcow /wyrae regularnych/ powizana instrukcja
wykonywana jest dla kadego rekordu wejciowego, ktory
odpowiada zadanemu wyraeniu regularnemu. Wyraenia
regularne s tymi samymi wyraeniami, ktore mona spotka w
egrep(1), i s podsumowane niej.
wyraenie relacyjne moe uywa dowolnego operatora ze
zdefiniowanych w sekcji o akcjach operatorow. Ogolnie,
testuj one, czy okrelone pola odpowiadaj okrelonym
wyraeniom regularnym.
Operatory &&, ||, i ! s logicznymi AND, OR i NOT,
podobnie jak w jzyku C. S one obliczane w sposob
skrocony, podobnie jak w C, i slu glownie do lczenia
bardziej podstawowych wyrae wzorcowych. Podobnie jak w
wikszoci jzykow, dla wymuszenia kolejnoci porownywania
mona uy nawiasow.
Operator ?: dziala podobnie jak ten sam operator w C.
Jeli pierwszy wzorzec jest prawdziwy, to do testowania
uywany jest nastpny wzorzec; w przeciwnym wypadku uywany
jest trzeci wzorzec. Obliczany jest tylko albo drugi albo
trzeci wzorzec.
Forma wzorzec1, wzorzec2 wyraenia jest nazywana wzorcem
zakresu. Dopasowuje ona wszystkie rekordy wejcie,
poczynajc od rekordu, ktory odpowiada wzorcowi1, a do
rekordu pasujcego do wzorzec2, wlcznie. Nie lczy si to z
innymi rodzajami wyrae wzorcowych.
Wyraenia regularne
Wyraenia regularne s rozszerzon form tego, co mona znale
w egrep. Skladaj si one z nastpujcych znakow:
c dopasowuje nie-specjalny znak c.
\c dopasowuje doslowny znak c.
. dopasowuje dowolny znak w/lcznie ze znakiem
nowej linii.
^ dopasowuje pocztek lacucha.
$ dopasowuje koniec lacucha.
[abc...] lista znakow, dopasowuje dowolny ze znakow
abc....
[^abc...] zanegowana lista znakow, dopasowuje wszystkie
znaki poza abc....
r1|r2 alternatywa: dopasowuje albo r1 albo r2.
r1r2 konkatenacja: dopasowuje r1, a nastpnie r2.
r+ dopasowuje jeden lub wicej r-ow.
r* dopasowuje zero lub wicej r-ow.
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 wyraenie powtarzane. Jeeli w nawiasach
jest jedna liczba, to poprzedzajce wyraenie
regularne r powtarzane jest n razy. Jeeli uyto
dwu rozdzielonych przecinkiem liczb, to r
powtarzane jest od n do m razy. Jeeli w
nawiasach jest jedna liczba, z nastpujcym po
niej przecinkiem to r powtarzane jest co
najmniej n razy.
Wyraenia powtarzane dostpne s tylko wtedy, gdy
w wierszu polece uyto albo opcji --posix albo
--re-interval.
\y dopasowuje pusty lacuch na pocztku bd na kocu
slowa.
\B dopasowuje pusty lacuch wewntrz slowa.
\< dopasowuje pusty lacuch na pocztku slowa.
\> dopasowuje pusty lacuch na kocu slowa.
\w dopasowuje dowolny znak wchodzcy w sklad slow
(liter, cyfr lub podkrelenie). [Nie obejmuje
to, niestety polskich znakow diakrytycznych.
Sekwencje dotyczce dopasowywania slow
oczywicie rownie nie uwzgldniaj specyficznych
polskich znakow].
\W dopasowuje dowolny znak nie wchodzcy w sklad
slow.
\` dopasowuje pusty lacuch na pocztku bufora
(lacucha).
\' dopasowuje pusty lacuch na kocu bufora.
Sekwencje specjalne (escape sequences), ktore s
prawidlowe w stalych lacuchowych (patrz niej) s rownie
poprawne w wyraeniach regularnych.
Klasy znak'ow s now wlasnoci wprowadzon w standardzie
POSIX. Klasa znakow jest specjaln notacj sluc do opisu
listy znakow posiadajcych szczegoln cech. Dla danej klasy
rzeczywicie wystpujce w niej znaki mog by rone w zalenoci
od kraju i/lub uywanego zestawu znakow. Na przyklad,
pojcie o tym, co jest znakiem alfabetu jest odmienne w
USA ni we Francji.
Klasa znakow dozwolona jest wylcznie w wyraeniu
regularnym wewntrz nawiasow klamrowych listy znakow.
Klasy znakow skladaj si z [:, slowa kluczowego opisujcego
klas, i koczcego :]. POSIX definiuje nastpujce klasy
znakow:
[:alnum:] Znaki alfanumeryczne.
[:alpha:] Znaki alfabetu.
[:blank:] Znaki spacji lub tabulatorow.
[:cntrl:] Znaki sterujce.
[:digit:] Znaki numeryczne (cyfry).
[:graph:] Znaki, ktore s zarowno widoczne (przy
wywietlaniu) jak i drukowalne. (Spacja jest
drukowalna, ale nie jest widoczna, podczas gdy
a jest i takie, i takie.)
[:lower:] Znaki malych liter alfabetu.
[:print:] Znaki drukowalne (znaki, ktore nie s znakami
sterujcymi.)
[:punct:] Znaki interpunkcyjne (nie bdce literami,
cyframi, znakami sterujcymi ani znakami
spacji).
[:space:] Znaki spacji (takie jak zwykla spacja,
tabulator, wysuw strony, by wymieni tylko
kilka).
[:upper:] Znaki duych liter alfabetu.
[:xdigit:] Znaki bdce cyframi szesnastkowymi.
Na przyklad, przed standardem POSIX, by dopasowa znaki
alfanumeryczne musialby napisa /[A-Za-z0-9]/. Jeli twoj
zestaw znakow zawiera inne znaki alfabetyczne, powysze
ich nie dopasuje, a jeli kolejno znakow w zestawie jest
inna ni w ASCII, to wyraenie to moe nawet nie dopasowywa
znakow alfanumerycznych ASCII. Za pomoc POSIX-owych klas
znakow, moesz napisa /[[:alnum:]]/, i dopasowuje to
wszystkie alfabetyczne i numeryczne znaki z twojego
zestawu znakow.
W listach znakow mog pojawi si dodatkowe sekwencje
specjalne. Dotyczy to zestawow znakow ronych od ASCII,
ktore mog posiada pojedyncze symbole (zwane elementami
por'ownywania - collating elements) reprezentowane przez
wicej ni jeden znak, jak i kilka znakow rownowanych w
operacjach por'ownywania, czy sortowania. (np. we
francuskim, zwykle "e" i akcentowane (grave) e` s
rownowane.)
Symbole porownywania (Collating Symbols)
Symbolem porownywania jest wieloznakowy element
porownywania zawarty pomidzy [. a .]. Na
przyklad, jeli ch jest elementem porownywania, to
[[.ch.]] jest wyraeniem regularnym dopasowujcym
ten element porownywania, podczas gdy [ch] jest
wyraeniem regularnym dopasowujcym c albo h.
Klasy rownowanoci (Equivalence Classes)
Klasa rownowanoci jest specyficzn dla ustawie
lokalnych nazw dla listy rownowanych sobie znakow
. Nazwa zawarta jest pomidzy [= a =]. Na
przyklad, do reprezentacji wszystkich "e," "`,"
and "`." mone zosta uyta nazwa e. W tym
przypadku, [[=e=]] jest wyraeniem regularnym
dopasowujcym dowolne z e, e', e' lub e`. e`.
Cechy te s bardzo wartociowe w ustawieniach lokalnych
innych ni dla jzyka angielskiego. Funkcje biblioteczne,
ktorych gawk uywa do dopasowywania wyrae regularnych
rozpoznaj obecnie wylcznie POSIX-owych klas znakow; nie
rozpoznaj one symboli porownywania ani klas rownowanoci.
Operatory \y, \B, \<, \>, \w, \W, \` oraz \' s
specyficzne dla gawk; s one rozszerzeniami opartymi na
moliwociach bibliotek wyrae regularnych GNU.
Rone opcje wiersza polece kontroluj sposob, w jaki gawk
interpretuje znaki w wyraeniach regularnych.
Brak opcji
W przypadku domylnym gawk udostpnia wszystkie
moliwoci wyrae regularnych POSIX oraz powyej
opisane operatory wyrae regularnych GNU. Nie s
jednak obslugiwane wyraenia powtarzane.
--posix
Obslugiwane s tylko POSIX-owe wyraenia regularne,
operatory GNU nie maj swego specjalnego znaczenia.
(tj., \w dopasowuje literal w). Dozwolone s
wyraenia powtarzane.
--traditional
Dopasowywane s wyraenia regularne tradycyjnego
uniksowego awk. Operatory GNU nie maj swego
specjalnego znaczenia, nie s dostpne ani wyraenia
powtarzane ani POSIX-owe klasy znakow ([[:alnum:]]
i tak dalej). Znaki opisywane przez osemkowe lub
szesnastkowe sekwencje specjalne s traktowane
doslownie, nawet jeli reprezentuj one metaznaki
wyrae regularnych.
--re-interval
Pozwala na wyraenia powtarzane, nawet przy uyciu
--traditional.
Akcje
Instrukcje akcji s zawarte w nawiasach { i }. Instrukcje
akcji skladaj si ze zwyczajnych instrukcji przypisania,
warunkow i instrukcji ptli, ktore mona znale w wikszoci
innych jzykow programowania. Operatory, instrukcje
sterujcymi, a take instrukcje wejcia/wyjcia s opracowane
na podstawie tych, spotykanych w jzyku C.
Operatory
Operatory w AWK, w kolejnoci malejcego priorytetu, to
(...) Grupowanie
$ Odniesienie si do pola.
++ -- Inkrementuj i dekrementuj. Zarowno
przedrostkowe i przyrostkowe.
^ Potgowanie (mona uy rownie **, oraz **= dla
operatora przypisania).
+ - ! Jednoargumentowy plus, minus i logiczna
negacja.
* / % Mnoenie, dzielenie i modulo (reszta
dzielenia).
+ - Dodawanie i odejmowanie.
odstp Konkatenacja (zlczenie) lacuchow.
< >
<= >=
!= == Regularne operatory relacyjne.
~ !~ Dopasowanie wyraenia regularnego, dopasowanie
zanegowane. UWAGA: Nie uywaj stalego
wyraenia regularnego (/foo/) po lewej stronie
~ lub !~. Uywaj go tylko po prawej stronie.
Wyraenie /foo/ ~ exp ma takie samo znaczenie
jak (($0 ~ /foo/) ~ exp). Nie jest to
zazwyczaj rzecz, ktorej oczekujesz.
in Przynaleno do tablicy.
&& Koniunkcja logiczna AND.
|| Alternatywa logiczna OR.
?: Wyraenie warunkowe z C. Ma ono posta wyra1 ?
wyra2 : wyra3. Jeli wyra1 jest prawdziwe, to
wartoci wyraenia jest wyra2, w przeciwnym
wypadku jest ni wyra3. Obliczane jest
wylcznie jedno z wyra2 i wyra3.
= += -=
*= /= %= ^= Przypisanie. Obslugiwane jest zarowno
przypisanie absolutne (zmienna = warto) jak i
przypisanie operatorowe (inne formy).
Instrukcje sterujce
Instrukcje sterujce s nastpujce:
if (warunek) instrukcja [ else instrukcja ]
while (warunek) instrukcja
do instrukcja while (warunek)
for (wyra1; wyra2; wyra3) instrukcja
for (var in tablica) instrukcja
break
continue
delete tablica[indeks]
delete tablica
exit [ wyraenie ]
{ instrukcje }
Instrukcje I/O
Instrukcje I/O s nastpujce:
close(plik [, jak]) Zamyka plik, potok lub proces
wspolbieny (co-process).
Opcjonalnego jak powinno si uywa
wylcznie do zamykania jednego koca
dwukierunkowego potoku do procesu
wspolbienego. Musi to by warto
lacuchowa, albo "to" albo "from".
getline Ustawia $0 z nastpnego rekordu
wejciowego; ustawia NF, NR, FNR.
getline <plik Ustawia $0 z nastpnego rekordu
pliku; ustawia NF.
getline var Ustawia var z nastpnego rekordu
wejciowego; ustawia NF, FNR.
getline var <plik Ustawia var z nastpnego rekordu
pliku.
polecenie | getline [var]
Uruchamia przesylanie potokiem
wyjcia polecenia albo do $0, albo
do var, jak wyej.
polecenie |& getline [var]
Uruchamia polecenia jako proces
wspolbieny, wysylajc potokiem jego
wyjcie albo do $0 albo do var, jak
wyej. Procesy wspolbiene s
rozszerzeniem gawk.
next Koczy przetwarzanie biecego rekordu
wejciowego. Nastpnie odczytywany
jest kolejny rekord wejciowy i
przetwarzanie rozpoczyna si od
pierwszego wzorca programu AWK.
Jeli osignito koniec danych
wejciowych, wykonywany jest blok
END.
nextfile Koczy przetwarzanie biecego pliku
wejciowego. Nastpny rekord wejciowy
zostanie odczytany z kolejnego
pliku wejciowego. Aktualizowane s
wartoci FILENAME i ARGIND, za FNR
jest ustawiane na 1 i przetwarzanie
rozpoczyna si od pierwszego wzorca
programu AWK. Jeli osignity
zostanie koniec danych wejciowych,
wykonywany jest blok END.
print Wypisuje biecy rekord. Rekord
wyjciowy zakoczony jest wartoci
zmiennej ORS.
print lista-wyrae Wypisuje wyraenia. Kade wyraenie
jest oddzielone wartoci zmiennej
OFS. Wyjciowy rekord jest koczony
wartoci zmiennej ORS.
print lista-wyrae >plik
Wypisuje wyraenia do pliku. Kade
wyraenie jest rozdzielone wartoci
zmiennej OFS. Rekord wyjciowy jest
zakoczony wartoci zmiennej ORS.
printf fmt, lista-wyrae
Formatuje i wypisuje.
printf fmt, lista-wyrae >plik
Formatuje i wypisuje do pliku.
system(cmd-line) Wywoluje polecenie systemowe cmd-
line, i zwraca jego status wyjcia.
(funkcja moe nie by dostpna na
systemach nie POSIX-owych.)
fflush([plik]) Opronia bufory zwizane z otwartym
plikiem wynikowym lub potokiem
plik. Jeli pominito plik, to
oproniane jest standardowe wyjcie.
Jeeli plik jest lacuchem pustym, to
oproniane s bufory wszystkich
otwartych plikow i potokow.
Dozwolone s te dodatkowe przekierowania wejcia i wyjcia
dla print i printf.
print ... >> plik
dokleja wyjcie do pliku. a przekierowanie
print ... | polecenie
zapisuje do potoku.
print ... |& polecenie
wysyla dane do procesu wspolbienego.
Polecenie getline zwraca zero na kocu pliku, a -1 przy
bldzie. W przypadku bldu, ERRNO zawiera lacuch opisujcy
problem.
UWAGA: uywajc potoku lub procesu wspolbienego do getline
albo z print czy printf wewntrz ptli, musisz uy close()
do utworzenia nowych instancji tego polecenia. AWK nie
zamyka automatycznie potokow ani procesow wspolbienych
gdy zwroc one EOF.
Instrukcja printf
Wersje AWK instrukcji printf oraz funkcji sprintf()
(patrz niej) przyjmuj nastpujce formaty konwersji:
%c Znak ASCII. Jeli argument uyty z %c byl
numeryczny, to zostanie potraktowany jak znak do
wypisania. W przeciwnym wypadku, argument bdzie
zrozumiany jako lacuch i zostanie wypisany tylko
pierwszy znak tego lacucha.
%d, %i liczba dziesitna (cz calkowita).
%e , %E
Liczba zmiennoprzecinkowa w postaci
[-]d.ddddddE[+-]dd. Format %E uywa po prostu E
zamiast e.
%f Liczba zmiennoprzecinkowa w postaci
[-]ddd.dddddd.
%g , %G
Uywa konwersji e lub f w zalenoci od tego, ktora
jest krotsza i pomijajc nieznaczce zera. Format
%G uywa E zamiast e.
%o Liczba osemkowa bez znaku (take calkowita).
%u Liczba dziesitna bez znaku (znow, calkowita).
%s Cig znakow (lacuch).
%x , %X
Liczba szesnastkowa bez znaku (calkowita). Format
%X uywa liter ABCDEF zamiast abcdef.
%% Pojedynczy znak %; aden argument nie jest
konwertowany.
Midzy % a liter sterujc mog znale si opcjonalne parametry
dodatkowe:
n$ Oznacza uycie n-tego argumentu w tym miejscu
formatowania. Nosi nazw specyfikatora pozycyjnego
i jest przeznaczone glownie do uytku w
przetlumaczonych wersjach lacuchow formatu, nie w
oryginalnym tekcie programu AWK. Jest to
rozszerzenie gawk.
- Wyraenie w swoim polu powinno by wyrownane do
lewej.
spacja W przypadku konwersji numerycznych, poprzed
wartoci dodatnie odstpem, za ujemne znakiem minus.
+ Znak plus, uyty przed modyfikatorem szerokoci
(patrz niej), nakazuje zawsze umieszcza znak
liczby przy konwersjach numerycznych, nawet jeeli
formatowane dane s dodatnie. Modyfikator +
powoduje uniewanienie modyfikatora spacji.
# Uywa "alternatywnej postaci" pewnych liter
sterujcych. Dla %o, dodaje pocztkowe zero. Dla
%x oraz %X dodaje pocztkowe 0x lub 0X przy
niezerowych wynikach. Dla %e, %E oraz %f wynik
zawsze zawiera kropk dziesitn. Dla %g i %G z
wyniku nie s usuwane kocowe zera.
0 Pocztkowe 0 (zero) dziala jako flaga, wskazujca, e
wynik powinien by uzupelniony zerami zamiast
spacji. Odnosi si to nawet do formatow nie-
numerycznych. Flaga ta dziala tylko wtedy, gdy
pole jest szersze ni warto do wypisania.
width (szeroko)
Pole powinno by wypelnione do tej szerokoci.
Zwykle pole uzupelniane jest spacjami. Jeli uyto
flagi 0, to wypelnienie zostanie dokonane przy
uyciu zer.
.prec (dokladno)
Liczba okrelajca dokladno, jaka ma zosta uyta przy
wypisywaniu. Dla formatow %e, %E i %f, jest to
liczba cyfr, jakie zostan wypisane po kropce
dziesitnej. Dla formatow %g i %G okrela maksymaln
liczb cyfr znaczcych. Dla formatow %d, %o, %i, %u,
%x oraz %X okrela minimaln liczb cyfr do
wypisania. Dla %s jest to maksymalna liczba znakow
lacucha, jakie maj zosta wypisane.
Dynamiczne wlaciwoci width i prec z printf() uywanego w
jzyku C s rownie wspierane. Znak gwiazdki * w miejscu
specyfikacji zarowno width jak i prec powoduje, e ich
wartoci s pobierane z listy argumentow, przekazywanej
printf lub sprintf(). Chcc uy specyfikatora pozycyjnego
z dynamiczn szerokoci lub dokladnoci naley poda n$ po * w
lacuchu formatu. Na przyklad, "%3$*2$.*1$s".
Specjalne nazwy plik'ow
Podczas przekierowa I/O przy uyciu print czy te printf do
pliku, albo przy uyciu getline z pliku, gawk rozpoznaje
wewntrznie pewne specjalne nazwy plikow. Te nazwy plikow
umoliwiaj dostp do otwartych deskryptorow plikow,
dziedziczonych po procesie rodzicielskim gawk'a
(zazwyczaj powloce). Inne pliki specjalne zapewniaj
dostp do informacji o uruchomionym procesie gawk. Z tych
specjalnych nazw plikow mona rownie korzysta w wierszu
polece do okrelania plikow danych. Te nazwy to:
/dev/stdin Standardowe wejcie.
/dev/stdout Standardowe wyjcie.
/dev/stderr Standardowe wyjcie diagnostyczne.
/dev/fd/n Plik zwizany z otwartym deskryptorem pliku n.
S one szczegolnie przydatne do komunikatow o bldach. Na
przyklad:
print "Spieprzy/le to!" > "/dev/stderr"
podczas gdy w przeciwnym wypadku musialby uy
print "Spieprzy/le to!" | "cat 1>&2"
Poniszych specjalnych nazw plikow mona uywa z operatorem
procesu wspolbienego |& do tworzenia witrualnych polcze
sieciowych TCP/IP.
/inet/tcp/lport/rhost/rport Plik dla polczenia TCP/IP na
lokalnym porcie lport do
zdalnej maszyny rhost na
zdalnym porcie rport. Uyj
portu 0, jeli chcesz, by to
system znalazl port.
/inet/udp/lport/rhost/rport Podobne, lecz uywa UDP/IP
zamiast TCP/IP.
/inet/raw/lport/rhost/rport Zarezerwowane do przyszlego
uytku.
Inne specjalne nazwy plikow zapewniajce informacje o
dzialajcym procesie gawk. Te nazwy plik'ow s obecnie
przestarza/le. Do uzyskania informacji, jakie podaj,
naley skorzysta z tablicy PROCINFO . Nazwy tych plikow
to:
Odczytanie tego pliku zwraca PID biecego procesu. Liczba
jest w postaci
dziesitnej i zakoczona jest now lini.
/dev/ppid Odczytanie tego pliku zwroci PID procesu
rodzicielskiego. Podobnie jak wyej, liczba
jest dziesitna i zakoczona now lini.
/dev/pgrpid Odczytanie tego pliku zwroci identyfikator
grupy procesow biecego procesu, zapisany w
postaci dziesitnej i zakoczony now lini.
/dev/user Odczytanie tego pliku zwroci pojedynczy
rekord, zakoczony now lini. Pola s oddzielone
spacjami. $1 jest wartoci wywolania
systemowego getuid(2), $2 jest wartoci
wywolania systemowego geteuid(2), $3 jest
wartoci wywolania systemowego getgid(2), a $4
jest wartoci wywolania systemowego
getegid(2). Jeli s jeszcze jakie dodatkowe
pola, to s to identyfikatory grup, zwrocone
przez getgroups(2). W niektorych systemach
moe nie by obslugiwana przynaleno do wielu
grup.
Funkcje numeryczne
AWK ma nastpujce wbudowane funkcje arytmetyczne:
atan2(y, x) zwraca arcus tangens y/x w radianach.
cos(wyra) zwraca cosinus z wyra w radianach.
exp(wyra) funkcja wykladnicza.
int(wyra) skraca do liczby calkowitej.
log(wyra) funkcja logarytmu naturalnego.
rand() zwraca liczb losow z przedzialu 0 i 1.
sin(wyra) zwraca sinus z wyra w radianach.
sqrt(wyra) pierwiastek kwadratowy.
srand([wyra]) Uywa wyra jako nowego nasionka dla
generatora liczb losowych. Bez podanego
wyra, uywany jest czas dnia. Warto zwracana
to poprzednie nasionko generatora liczb
losowych.
Funkcje /lacuchowe
AWK ma nastpujce wbudowane funkcje lacuchowe:
asort(s [, d]) Zwraca liczb elementow w rodlowej
tablicy s. Zawarto s jest
sortowana z zastosowaniem
zwyklych regul gawk do
porownywania wartoci, za indeksy
posortowanych wartoci s
azstpowane s kolejnymi liczbami
calkowitymi, poczwszy od 1. Jeli
podano opcjonaln tablic docelow
d, to najpierw s jest powielana
do d, a nastpnie sortowana jest
d, a indeksy tablicy rodlowej s
pozostaj niezmienione.
gensub(r, s, h [, t]) w lacuchu docelowym t wyszukuje
podlacuchy odpowiadajce wyraeniu
regularnemu r. Jeeli h jest
lacuchem zaczynajcym si od g lub
G, to zastpuje wszystkie
znalezione dopasowania r przez s.
W przeciwnym wypadku, h jest
liczb wskazujc, ktore z kolejnych
dopasowa r ma zosta zastpione.
Jeeli nie podano t, to zamiast
niego uywane jest $0. Wewntrz
tekstu zastpujcego s, mona posluy
si sekwencj \n, gdzie n jest cyfr
od 1 do 9, wskazujc na tekst
dopasowany przez n-te podwyraenie
w nawiasach. Sekwencja \0 oznacza
caly dopasowany tekst, tak samo
jak znak &. W przeciwiestwie do
sub() i gsub(), jako wynik
funkcji zwracany jest zmieniony
lacuch, za pierwotny lacuch
docelowy pozostaje nie zmieniony.
gsub(r, s, t) kady podlacuch, odpowiadajcy
wyraeniu regularnemu r w lacuchu
t, wymienia na lacuch s, i zwraca
liczb podmian. Jeli nie podano
t, uywa $0. Znak & w tekcie
zastpujcym zostanie zastpiony
faktycznie dopasowanym tekstem.
Uyj \& by otrzyma literal &.
(Musi to by wpisane jako "\\&".
Pelniejsze omowienie regul & oraz
odwrotnych ukonikow w tekcie
zastpujcym dla funkcji sub(),
gsub() i gensub() znajdziesz w
pozycji GAWK: Efektywne
programowanie w AWK.)
index(s, t) zwraca indeks lacucha t w lacuchu
s, lub zero, jeli t nie zostalo
znalezione.
length(s) zwraca dlugo lacucha s lub dlugo
$0, jeli nie podano s.
match(s, r [, a]) zwraca pozycj w s, gdzie pojawia
si wyraenie regularne r. Jeli
nie podano r, zwracane jest zero.
Jeli jest jednak obecne, to
dodatkowo ustawiane s zmienne
RSTART i RLENGTH. Zauwa, e
kolejno argumentow jest taka sama
jak dla operatora ~: str ~ re.
Jeli podano tablic a, to jest ona
czyszczona a nastpnie elementy od
1 do n wypelniane s fragmentami s
pasujcymi do odpowiednich ujtych
w nawiasy podwyrae z r. Zerowy
element a zawiera fragment s
dopasowany przez cale wyraenie
regularne r.
split(s, a, r) dzieli lacuch s na tablic a w
miejscach rozdzielonych wyraeniem
regularnym r, i zwraca liczb pol.
Jeli pominito r, zamiast niego
uywane jest FS. Na pocztku,
tablica a jest czyszczona.
Podzial odbywa si identycznie jak
opisany powyej podzial rekordu na
pola.
sprintf(fmt, lista-wyra)
wypisuje list-wyra wedlug fmt, i
zwraca lacuch wyjciowy.
strtonum(str) Bada str, i zwraca jego numeryczn
warto. Jeli str zaczyna si od
pocztkowego 0, to strtonum()
przyjmuje, e str jest liczb
osemkow. Jeli str zaczyna si od
pocztkowego 0x lub 0X, to
strtonum() przyjmuje, e str jest
liczb szesnastkow.
sub(r, s, t) Podobne do gsub(), lecz
podmieniany jest tylko pierwszy
odpowiadajcy podlacuch.
substr(s, i, n) zwraca maksymalnie n-znakowy
podlacuch lacucha s, zaczynajcy
si od pozycji i. Jeli pominito
parametr n, uyta zostaje reszta
s.
tolower(str) zwraca kopi lacucha str, w ktorej
wszystkie wielkie litery zostaly
zastpione malymi. Nie
alfabetyczne znaki pozostaj bez
zmian.
toupper(str) zwraca kopi lacucha str, w ktorej
wszystkie male litery zostaly
zastpione wielkimi. Nie
alfabetyczne znaki pozostaj bez
zmian.
Funkcje czasu
Poniewa jednym z podstawowych zada programow AWK jest
przetwarzanie plikow z logami, ktore zawieraj informacje
czasowe, gawk udostpnia nastpujce funkcje, umoliwiajce
uzyskiwanie znacznikow czasu (timestamps) i ich
formatowanie.
mktime(danedaty)
Zamienia danedaty w znacznik czasu o tej
postaci, co zwracana przez systime(). danedaty
jest lacuchem postaci YYYY MM DD HH MM SS[
DST]. Zawartoci lacucha jest sze lub siedem
liczb oznaczajcych odpowiednio: pelny rok
lcznie ze stuleciem, miesic od 1 do 12, dzie
miesica 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.
Wartoci tych liczb nie musz lee w podanych
zakresach. Na przyklad, godzina -1 oznacza 1
godzin przed polnoc. Przyjto kalendarz
gregoriaski zaczynajcy si od zera, w ktorym rok
0 wystpuje przed rokiem 1, a rok -1 przed
rokiem 0. Zaklda si, e czas jest podany wedlug
lokalnej strefy czasowej. Jeli flaga czasu
letniego jest dodatnia, to czas jest czasem
letnim. Jeli jest zerowa, to standardowym.
Jeli jest ujemna (domylne), to mktime() probuje
ustali czy dla zadanego czasu funkcjonuje czas
letni. Jeli danedaty nie zawieraj
wystarczajcej liczby elementow lub wyknikowy
czas jest poza zakresem, to funkcja zwraca -1.
strftime(format, timestamp)
formatuje timestamp wedlug wskazowek zawartych
w zmiennej format. timestamp powinien by taki
sam, jak ten, zwracany przez systime(). Jeli
brakuje parametru timestamp, uywany jest biecy
czas dnia. Jeeli pominito format, to uywany
jest domylny format rownowany formatowi wynikow
z date(1). Zobacz specyfikacj funkcji strftime
() w ANSI C, aby zobaczy jakie konwersje
formatow s na pewno dostpne. Razem z gawk
dostarczana jest wersja public domain
strftime(3) oraz odpowiednia strona podrcznika
man; jeli ta wersja zostala uyta do zbudowania
gawk, to wszystkie konwersje opisane na tej
stronie bd dostpne dla gawk.
systime() zwraca biecy czas dnia w liczbach sekund od
pocztku Epoki (czyli od polnocy UTC, 1 stycznia
1970 na systemach POSIX-owych).
Funkcje operujce na bitach
Poczwszy od wersji 3.1 gawk, dostpne s ponisze funkcje
operujce na bitach. Dzialaj przez konwersj wartoci
zmiennoprzecinkowych podwojnej precyzji na calkowite
unsigned long, wykonanie operacji, a nastpnie konwersj
wyniku z powrotem na zmiennoprzecinkowy. Te funkcje to:
and(v1, v2) Zwraca bitow koniunkcj AND wartoci
podanych przez v1 i v2.
compl(val) Zwraca bitowe uzupelnienie val.
lshift(val, ile) Zwraca warto val, przesunit w lewo o
ile bitow.
or(v1, v2) Zwraca bitow alternatyw OR wartoci
podanych przez v1 i v2.
rshift(val, ile) Zwraca warto val, przesunit w prawo o
ile bitow.
xor(v1, v2) Zwraca bitow alternatyw wykluczajc
XOR wartoci podanych przez v1 i v2.
Funkcje internacjonalizacji
Poczwszy od wersji 3.1 gawk, mona uywa wewntrz programow
AWK funkcji do tlumaczenia lacuchow podczas wykonania
programu. Szczegoly opisano w GAWK: Efektywne
programowanie w AWK.
bindtextdomain(katalog [, domena])
Okrela katalog, w ktorym gawk szuka plikow .mo, w
przypadku gdy nie bd lub nie mog by umieszczone w
,,standardowych'' miejscach (np., podczas testow).
Zwraca katalog, z ktorym jest ,,zwizana'' domena.
Domyln domen jest warto TEXTDOMAIN. Jeli katalog
jest lacuchem pustym (""), to bindtextdomain()
zwraca biece wizanie dla zadanej domeny.
dcgettext(/lacuch [, domena [, kategoria]])
Zwraca tlumaczenie /lacucha w domenie tekstowej
domena dla kategorii locale kategoria. Domyln
domen jest bieca warto TEXTDOMAIN. Domyln wartoci
kategorii jest "LC_MESSAGES".
Jeli podaje si warto kategorii, to musi to by
lacuch rowny jednej ze znanych kategorii locale
opisanych w GAWK: Efektywne programowanie w AWK.
Trzeba rownie poda domen tekstow. Uyj TEXTDOMAIN,
jeli chcesz korzysta z biecej domeny.
FUNKCJE UYTKOWNIKA
Funkcje w AWK s definiowane nastpujco:
function nazwa(lista parametr'ow) { instrukcje }
Funkcje s wykonywane po wywolaniu ich z wyrae wystpujcych
we wzorcach lub akcjach. Do tworzenia instancji
parametrow formalnych, zadeklarowanych w funkcji uywane s
parametry faktyczne uyte w wywolaniu funkcji. Tablice s
przekazywane przez wskazanie, inne zmienne przez warto.
Poniewa funkcje pierwotnie nie byly czci jzyka AWK,
obsluga zmiennych lokalnych jest troch niezdarna: S one
deklarowana jako dodatkowe parametry w licie parametrow.
Konwencja polega na separowaniu zmiennych lokalnych od
parametrow dodatkowymi spacjami w licie parametrow. Na
przyklad:
function f(p, q, a, b) { # a i b s lokalne
..... }
/abc/ { ... ; f(1, 2) ; ... }
Lewy nawias w wywolaniu funkcji musi wystpowa bezporednio
za nazw funkcji, bez wtrconej bialej spacji. Ma to na
celu zapobieenie niejednoznacznoci skladni z operatorem
konkatenacji (lczenia). Ograniczenie to nie odnosi si do
funkcji wbudowanych, ktore s opisane powyej.
Funkcje mog wola siebie nawzajem i mog by rekurencyjne.
Parametry funkcji uywane jako zmienne lokalne s podczas
wywolania funkcji inicjalizowane na lacuch pusty i liczb
zero. Chcc, by funkcja zwracala warto naley posluy si
skladni: return wyra. Warto zwracana przez funkcj jest
niezdefiniowana jeli nie podano wartoci zwracanej lub
funkcja koczy prac bez jawnej instrukcji powrotu.
Jeeli uyto --lint, to gawk ostrzega o wywolaniach
niezdefiniowanych funkcji podczas analizy skladni, a nie
w czasie wykonania. Wywolanie niezdefiniowanej funkcji w
czasie wykonania powoduje bld krytyczny.
Zamiast slowa function mona uywa slowa funct.
DYNAMICZNE /LADOWANIE NOWYCH FUNKCJI
Poczwszy od wersji 3.1 gawk, mona dynamicznie dodawa nowe
funkcje wbudowane do pracujcego interpretera gawk.
Dokladne szczegoly wykraczaj poza zakres tej strony
podrcznika. Mona je znale w GAWK: Efektywne
programowanie w AWK.
extension(objekt, funkcja)
Dynamicznie dolcza plik obiektow wspoluytkowanych
o nazwie objekt, i wywoluje funkcj z tego
obiektu, do wykonania inicjowania. Obydwa te
argumenty powinny by podane jako lacuchy. Zwraca
warto zwracan przez funkcj.
Ta funkcja jest dostarczana i dokumentowana w GAWK:
Efektywne programowanie w AWK, ale wszystko dotyczce tej
cechy moe si zmieni w kolejnym wydaniu. SILNIE zalecamy,
by nie uywa/l tej funkcji do czego, czego nie masz zamiaru
robi ponownie.
SYGNA/LY
pgawk przyjmuje dwa sygnaly. SIGUSR1 powoduje, e zrzuca
on profil i stos wywol funkcji do pliku profilu, ktorym
jest albo awkprof.out, albo plik podany z opcj --profile.
Nastpnie kontynuuje dzialanie. SIGHUP powoduje, e zrzuca
on profil i stos wywol funkcji a nastpnie koczy prac.
PRZYK/LADY
Wypisz i posortuj nazwy zgloszeniowe (login) wszystkich uytkownikow:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Zlicz linie w pliku:
{ nlines++ }
END { print nlines }
Poprzed kad lini jej numerem w pliku:
{ print FNR, $0 }
Konkatenatuj i numeruj linie (wariacja tematu):
{ print NR, $0 }
INTERNACJONALIZACJA
Stale lacuchowe s cigami znakow ujtymi w cudzyslowy. W
rodowiskach innych ni angielskojzyczne, moliwe jest
oznakowanie lacuchow w programie AWK jako wymagajcych
tlumaczenia na wlsny jzyk narodowy. Lacuchy takie s
oznaczone w programie AWK przez pocztkowy znak
podkrelenia ("_"). Na przyklad,
gawk 'BEGIN { print "hello, world" }'
zawsze wypisuje hello, world. Ale,
gawk 'BEGIN { print _"hello, world" }'
we Francji moe wypisa bonjour, monde.
W tworzeniu i uruchamianiu zlokalizowanego programu AWK
wyronia si kilka etapow.
1. Dodanie akcji BEGIN przypisujcej warto zmiennej
TEXTDOMAIN do ustawienia domeny tekstowej na nazw
skojarzon z naszym programem.
BEGIN { TEXTDOMAIN = "myprog" }
Umoliwia to gawkowi znalezienie pliku .mo zwizanego z
programem. Be ztego kroku, gawk uywa domeny
tekstowej messages, ktora prawdopodobnie nie zawiera
tlumacze dla naszego programu.
2. Oznakowanie pocztkowymi znakami podkrelenia
wszystkich lacuchow, ktore powinny zosta
przetlumaczone.
3. Jeli to potrzebne, uycie 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 wlaciwego tlumaczenia, zbudowanie i
zainstalowanie odpowiedniego pliku .mo.
Funkcje internacjonalizacji opisano szczegolowo w GAWK:
Efektywne programowanie w AWK.
ZGODNO Z POSIX
Podstawowym celem gawk byla zgodno ze standardem POSIX, a
take zgodno z najnowszymi wersjami UNIX awk. W tym celu
gawk zawiera nastpujce widzialne dla uytkownika
wlaciwoci, ktore nie s opisane w ksice o AWK, lecz s czci
awk z Bell Laboratories (Systemu Vr4), a take s czci
standardu POSIX.
Ksika wskazuje, e przypisanie w wierszu polece zachodzi
gdy awk w innym wypadku otworzyl by argument jako plik,
co nastpuje po wykonaniu bloku BEGIN. Jednak we
wczeniejszych implementacjach, gdy takie przypisanie
pojawilo si przed jakimikolwiek nazwami plikow,
nastpowalo ono przed uruchomieniem bloku BEGIN.
Aplikacje z czasem zaczly polega na tej "wlaciwoci". Gdy
awk zostal zmieniony tak, by odpowiadal dokumentacji,
dodano opcj -v do przypisywania wartoci zmiennym przed
wykonaniem programu, aby usatysfakcjonowa aplikacje,
ktore zalealy od starego zachowania. (Wlaciwo ta zostala
uzgodniona midzy programistami Bell Laboratories i GNU).
Opcja -W, przeznaczona dla wlaciwoci zalenych od
implementacji naley do standardu POSIX.
Podczas przetwarzania argumentow, gawk uywa specjalnej
opcji "--", sygnalizujcej koniec argumentow. W trybie
zgodnoci bdzie ostrzegal, lecz poza tym ignorowal opcje
niezdefiniowane. W normalnym trybie dzialania, argumenty
takie s przekazywane do programu AWK, aby je przetworzyl.
Ksika o AWK nie definiuje wartoci zwracanej przez
srand(). Wersja SVr4 UNIX awk (oraz standard POSIX)
zwracaj warto poprzedniego uywanego nasionka, umoliwiajc
ledzenie kolejnych sekwencji liczb losowych. Dlatego
srand() w gawk rownie zwraca poprzednio uywane nasionko.
Innymi nowymi wlaciwociami s: uywanie 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/LACIWOCI HISTORYCZNE
Istniej dwie historyczne wlaciwoci AWK, obslugiwane przez
gawk. Po pierwsze, moliwe jest wywolanie funkcji
wbudowanej length() nie tylko bez argumentow, ale rownie
bez nawiasow! Tak wic
a = length # wity Algol 60, Batman!
oznacza to samo co jedno z poniszych
a = length()
a = length($0)
Wlaciwo ta jest oznaczona jako "nieaprobowana" w
standardzie POSIX i gawk wypisuje ostrzeenie o jej uyciu,
o ile podano w wierszu polece opcj -W lint.
Inn wlaciwoci jest uywanie instrukcji continue lub break
poza cialami ptli while, for lub do. Tradycyjne
implementacje AWK traktowaly takie uycie jako rownowanik
instrukcji next. Gawk realizuje ten sposob uycia, jeli
podano opcj --traditional.
ROZSZERZENIA GNU
Gawk ma kilka rozszerze w stosunku do POSIX awk. S one
opisane w tej sekcji. Wszystkie rozszerzenia, ktore s tu
opisane mona wylczy, wywolujc gawk z opcj --traditional.
Nastpujce wlaciwoci gawk nie s dostpne w wersjach POSIX
awk.
o Dla plikow podanych opcj -f nie jest wykonywane
przeszukiwanie cieki. option. Dlatego te, zmienna
rodowiskowa AWKPATH nie jest zmienn specjaln.
o Sekwencja specjalna \x (Wylczana przez --posix.)
o Funkcja fflush() (Wylczana przez --posix.)
o Moliwo kontynuowania linii po ? i :. (Wylczana przez
--posix.)
o Stale osemkowe i szesnastkowe w programach AWK.
o Zmienne ARGIND, BINMODE, ERRNO, LINT, RT i TEXTDOMAIN
nie s specjalne.
o Zmienna IGNORECASE oraz jej efekty uboczne nie s
dostpne.
o Zmienna FIELDWIDTHS oraz rozdzielanie o ustalonej
szerokoci pola.
o Nie jest dostpna tablica PROCINFO
o Poslugiwanie si RS jako wyraeniem regularnym.
o Nie s rozpoznawane specjalne nazwy plikow dostpne do
przeadresowa I/O.
o Operator |& do tworzenia procesow wspolbienych.
o Moliwo wydzielania pojedynczych znakow przy uyciu
lacucha pustego jako wartoci FS oraz jako trzeciego
argumentu funkcji split().
o Uycie delete array do kasowania calej zawartoci
tablicy.
o Uycie nextfile do porzucenia przetwarzania biecego
pliku wejciowego.
o Opcjonalny drugi argument funkcji close().
o Opcjonalny trzeci argument funkcji match().
o Moliwo uycia specyfikatorow pozycyjnych w printf i
sprintf().
Funkcje
and(), asort(), bindtextdomain(), compl(), dcgettext(),
gensub(), lshift(), mktime(), or(), rshift(),
strftime(), strtonum(), systime() i xor(). ! .
o Lokalizowalne lacuchy.
o Dynamiczne dodawanie nowych funkcji wbudowanych, funkcj
extension().
Ksika o AWK nie definiuje wartoci zwracanej przez funkcj
close(). Zaimplementowana w Gawk funkcja close() zwraca
warto z fclose(3) lub pclose(3), zalenie czy zamykano
plik czy potok. Zwraca kod zakoczenia procesu przy
zamykaniu potoku wejciowego. Wartoci zwracan jest -1
jeli dany plik, potok czy proces wspolbieny nie byly
otwarte za pomoc przekierowania.
Gdy gawk jest wywolany z opcj --traditional, jeli
argumentem fs opcji -F jest "t", to FS jest ustawiane na
znak tabulacji. Zauwa, e wpisanie gawk -F\t ...
powoduje po prostu zacytowanie przez powlok znaku "t" i
nie przesyla "\t" do opcji -F. Poniewa jest to raczej
brzydki przypadek specjalny, nie jest to zachowanie
domylne. Zachowanie to nie pojawia si rownie po podaniu
opcji -W posix. Aby faktycznie uzyska znak tabulacji
jako separator pol, najlepiej posluy si apostrofami jako
znakami cytowania: gawk -F'\t' ....
ZMIENNE RODOWISKOWE
Do podania listy katalogow przegldanych przez gawk
podczas poszukiwania plikow zadanych opcjami -f i --file
mona posluy si zmienn rodowiskow AWKPATH.
Jeli w rodowisku istnieje zmienna POSIXLY_CORRECT to gawk
zachowuje si tak, jakby podano mu w wierszu polece opcj
--posix. Jeli podano opcj --lint, gawk wyda ostrzeenie o
tym efekcie.
ZOBACZ TAKE
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 tlum.: powysza publikacja dostarczana jest razem z
opisywan wersj programu]
B/LDY
Opcja -F niekoniecznie ma wlaciwo przypisywania
zmiennych; pozostaje tylko dla zgodnoci wstecznej.
Niepoprawne skladniowo programy z pojedynczego znaku mog
powodowa przepelnienie stosu analizatora, dajc niezbyt
pomocny komunikat. Programy takie s zaskakujco trudne do
do analizy w calkiem ogolnym przypadku, a wysilek, by to
jednak robi nie jest tego wart.
AUTORZY
Oryginalna wersja UNIX awk byla 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
wprowadzil wiele poprawek. David Trueman, z pomoc
Arnolda Robbinsa, uczynil gawk zgodnym z now wersj UNIX
awk. Arnold Robbins jest biecym opiekunem projektu.
Pierwotny port pod DOS zostal dokonany przez Conrada
Kwoka i Scotta Garfinkle. Scott Deifik jest obecnym
opiekunem wersji DOS. Pat Rankin zrobil port na VMS, a
Michal Jaegermann zrobil port na Atari ST. Port na OS/2
zostal zrobiony przez Kai Uwe Rommela, przy udziale i
pomocy Darrela Hankersona. Fred Fish zapewnil obslug dla
Amigi, Stephen Davies przeniesienie na Tandem, a Martin
Brown na BeOS.
INFORMACJA O WERSJI
Ta strona podrcznika man opisuje gawk, w wersji numer
3.1.0.
RAPORTY O B/LDACH
Jeli znajdziesz w gawk bld, prosz o przeslanie listu
poczt elektroniczn na adres bug-gnu-utils@gnu.org, z kopi
(carbon copy) na arnold@gnu.org. Prosz o zalczenie
wersji systemu operacyjnego, wersji gawk (otrzymanej z
gawk --version), wersji kompilatora C, ktorym zostala
skompilowana, oraz moliwie malego programu testowego i
danych, ktore umoliwiaj powtorzenie problemu.
Przed wyslaniem raportu o bldzie, zrob dwie rzeczy.
Najpierw sprawd, czy masz najnowsz wersj gawk. Wiele
bldow (zwykle subtelnych) jest poprawianych w kadej nowej
wersji i jeli twoja wersja jest przedawniona, to by moe
problem jest ju rozwizany. Po drugie, prosz, przeczytaj
uwanie t stron podrcznika man oraz podrczniki, aby si
upewni, e to, co uwaasz za bld, jest nim naprawd, a nie
tylko dziwactwem w konstrukcji jzyka.
Cokolwiek zrobisz, NIE wysylaj zgloszenia bldu na grup
dyskusyjn comp.lang.awk. Mimo, e opiekunowie projektu
gawk czasami czytaj t grup, wysylanie na ni zglosze jest
drog niepewn. Prosz, uyj zamiast tego podanych wyej
adresow poczty elektronicznej.
PODZIKOWANIA
Brian Kernighan z Bell Laboratories dal wartociowe
wsparcie podczas testowania i debuggowania. Dzikujemy.
KOPIOWANIE NINIEJSZEJ DOKUMENTACJI
[Sekcja nietlumaczona z uwagi na ograniczenie zawarte w
ostatnim akapicie]
Copyright (C) 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.
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu
Tlumaczenia Manuali i moe nie by aktualne. W razie
zauwaenia ronic midzy powyszym opisem a rzeczywistym
zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie si z oryginaln (angielsk) wersj strony
podrcznika.