gawk

GAWK(1)                            NarzÄdzia                           GAWK(1)



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,” “`,” and “`.”  możne zostaÄ użyta nazwa e.  W tym
              przypadku, [[=e=]] jest wyrażeniem regularnym dopasowujÄcym
              dowolne z e, ´, lub `.

       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.



Free Software Foundation         29 maja 2001                          GAWK(1)