Provided by: manpages-pl_20060617-1_all bug

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 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 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.  Uywaj tej opcji ze szczegln ostronoci!

       -W posix
       --posix
              Włącza tryb zgodnoci, w którym obowiązują następujące dodatkowe
              ograniczenia:

              o sekwencje specjalne \x nie są rozpoznawane.

              o Przy  FS  ustawionym  na pojedynczą spację jako separatory pól
                działają tylko spacje i tabulatory, znaki nowej linii  nie  są
                separatorami pól.

              o Nie można kontynuować linii po ?  i :.

              o Synonim  `func'  dla  słowa  kluczowego  `function'  nie  jest
                rozpoznawany.

              o Operatory ** i **= nie mogą być używane zamiast ^ i ^=.

              o 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 parametrw) { instrukcje }
       Gawk najpierw odczytuje źródło  programu  z  podanych  plikw-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 wejcia  uytkownika,
       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
              /wyraenie regularne/
              wyraenie 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 /wyrae  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.
       wyraenie 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  wcznie  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ą  wyraenie   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 znakw 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 wewntrz  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
       porwnywania - collating elements)  reprezentowane  przez
       więcej  niż jeden znak, jak i kilka znaków równoważnych w
       operacjach  porwnywania,   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, e', lub e`.

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

       Operatory  \y,  \B,  \<,  \>,  \w,  \W,  \`  oraz  \'  są
       specyficzne  dla  gawk; są one rozszerzeniami opartymi na
       możliwościach bibliotek wyrażeń regularnych GNU.

       Różne opcje wiersza poleceń  kontrolują  sposób,  w  jaki
       gawk interpretuje znaki w wyrażeniach regularnych.

       Brak opcji
              W  przypadku  domyślnym  gawk udostępnia wszystkie
              możliwości wyrażeń regularnych POSIX oraz  powyżej
              opisane  operatory wyrażeń regularnych GNU. Nie są
              jednak obsługiwane wyrażenia powtarzane.

       --posix
              Obsługiwane   są   tylko    POSIX-owe    wyrażenia
              regularne,    operatory   GNU   nie   mają   swego
              specjalnego  znaczenia.    (tj.,   \w   dopasowuje
              literał w).  Dozwolone są wyrażenia powtarzane.

       --traditional
              Dopasowywane  są  wyrażenia regularne tradycyjnego
              uniksowego awk.   Operatory  GNU  nie  mają  swego
              specjalnego   znaczenia,   nie   są  dostępne  ani
              wyrażenia powtarzane ani  POSIX-owe  klasy  znaków
              ([[:alnum:]]  i tak dalej).  Znaki opisywane przez
              ósemkowe lub szesnastkowe sekwencje  specjalne  są
              traktowane dosłownie, nawet jeśli reprezentują one
              metaznaki wyrażeń regularnych.

       --re-interval
              Pozwala na wyrażenia powtarzane, nawet przy użyciu
              --traditional.

   Akcje
       Instrukcje   akcji   są   zawarte  w  nawiasach  {  i  }.
       Instrukcje akcji składają się ze  zwyczajnych  instrukcji
       przypisania,  warunków  i  instrukcji  pętli, które można
       znaleźć  w  większości  innych   języków   programowania.
       Operatory,  instrukcje  sterującymi,  a  także instrukcje
       wejścia/wyjścia  są   opracowane   na   podstawie   tych,
       spotykanych w języku C.

   Operatory
       Operatory w AWK, w kolejności malejącego priorytetu, to

       (...)       Grupowanie

       $           Odniesienie się do pola.

       ++ --       Inkrementuj     i     dekrementuj.    Zarówno
                   przedrostkowe i przyrostkowe.

       ^           Potęgowanie (można użyć również **, oraz  **=
                   dla operatora przypisania).

       + - !       Jednoargumentowy   plus,   minus  i  logiczna
                   negacja.

       * / %       Mnożenie,   dzielenie   i   modulo    (reszta
                   dzielenia).

       + -         Dodawanie i odejmowanie.

       odstp      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ć wyra1
                   ?   wyra2   :   wyra3.  Jeśli  wyra1  jest
                   prawdziwe,  to   wartością   wyrażenia   jest
                   wyra2, w przeciwnym wypadku jest nią wyra3.
                   Obliczane jest wyłącznie  jedno  z  wyra2  i
                   wyra3.

       = += -=
       *= /= %= ^= 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 (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ą 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-wyrae   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-wyrae >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-wyrae
                             Formatuje i wypisuje.

       printf fmt, lista-wyrae >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  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(acuch [, domena [, kategoria]])
              Zwraca tłumaczenie acucha  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 parametrw) { 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  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.

       o Dla  plików  podanych  opcją  -f  nie  jest  wykonywane
         przeszukiwanie ścieżki.  option.  Dlatego też,  zmienna
         środowiskowa AWKPATH nie jest zmienną specjalną.

       o Sekwencja specjalna \x (Wyłączana przez --posix.)

       o Funkcja fflush() (Wyłączana przez --posix.)

       o Możliwość   kontynuowania  linii po ?  i :.  (Wyłączana
         przez --posix.)

       o Stałe ósemkowe 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ą
         dostępne.

       o Zmienna  FIELDWIDTHS  oraz  rozdzielanie  o   ustalonej
         szerokości pola.

       o Nie jest dostępna tablica PROCINFO

       o Posługiwanie się RS jako wyrażeniem regularnym.

       o Nie  są rozpoznawane specjalne nazwy plików dostępne do
         przeadresowań I/O.

       o Operator |& do tworzenia procesów współbieżnych.

       o Możliwość wydzielania pojedynczych znaków  przy  użyciu
         łańcucha  pustego  jako wartości FS oraz jako trzeciego
         argumentu funkcji split().

       o Użycie  delete  array  do  kasowania  całej  zawartości
         tablicy.

       o Użycie  nextfile  do porzucenia przetwarzania bieżącego
         pliku wejściowego.

       o Opcjonalny drugi argument funkcji close().

       o Opcjonalny trzeci argument funkcji match().

       o 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().  ! .

       o Lokalizowalne łańcuchy.

       o 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  (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.