Provided by: manpages-pl_0.7-2_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

        Uwaga! To tłumaczenie może być nieaktualne!

       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ów 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
              e`.  e`.

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

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

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

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

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

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

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

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

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

       (...)       Grupowanie

       $           Odniesienie się do pola.

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

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

       + - !       Jednoargumentowy plus, minus i logiczna negacja.

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

       + -         Dodawanie i odejmowanie.

       odstęp      Konkatenacja (złączenie) łańcuchów.

       < >
       <= >=
       != ==       Regularne operatory relacyjne.

       ~ !~        Dopasowanie wyrażenia regularnego, dopasowanie zanegowane.  UWAGA: Nie  używaj
                   stałego  wyrażenia  regularnego  (/foo/) po lewej stronie ~ lub !~.  Używaj go
                   tylko po prawej stronie. Wyrażenie /foo/ ~ exp ma  takie  samo  znaczenie  jak
                   (($0 ~ /foo/) ~ exp).  Nie jest to zazwyczaj rzecz, której oczekujesz.

       in          Przynależność do tablicy.

       &&          Koniunkcja logiczna AND.

       ||          Alternatywa logiczna OR.

       ?:          Wyrażenie  warunkowe z C. Ma ono postać wyraż1 ? wyraż2 : wyraż3. Jeśli wyraż1
                   jest prawdziwe, to wartością wyrażenia jest wyraż2, w przeciwnym wypadku  jest
                   nią wyraż3.  Obliczane jest wyłącznie jedno z wyraż2 i wyraż3.

       = += -=
       *= /= %= ^= Przypisanie.   Obsługiwane  jest  zarówno  przypisanie  absolutne  (zmienna  =
                   wartość) jak i przypisanie operatorowe (inne formy).

   Instrukcje sterujące
       Instrukcje sterujące są następujące:

              if (warunek) instrukcja [ else instrukcja ]
              while (warunek) instrukcja
              do instrukcja while (warunek)
              for (wyraż1; wyraż2; wyraż3) instrukcja
              for (var in tablica) instrukcja
              break
              continue
              delete tablica[indeks]
              delete tablica
              exit [ wyrażenie ]
              { instrukcje }

   Instrukcje I/O
       Instrukcje I/O są następujące:

       close(plik [, jak])   Zamyka   plik,   potok   lub   proces   współbieżny    (co-process).
                             Opcjonalnego  jak  powinno się używać wyłącznie do zamykania jednego
                             końca dwukierunkowego potoku do procesu współbieżnego. Musi  to  być
                             wartość łańcuchowa, albo "to" albo "from".

       getline               Ustawia $0 z następnego rekordu wejściowego; ustawia NF, NR, FNR.

       getline <plik         Ustawia $0 z następnego rekordu pliku; ustawia NF.

       getline var           Ustawia var z następnego rekordu wejściowego; ustawia NF, FNR.

       getline var <plik     Ustawia var z następnego rekordu pliku.

       polecenie | getline [var]
                             Uruchamia przesyłanie potokiem wyjścia polecenia albo do $0, albo do
                             var, jak wyżej.

       polecenie |& getline [var]
                             Uruchamia polecenia jako proces współbieżny, wysyłając potokiem jego
                             wyjście  albo  do $0 albo do var, jak wyżej.  Procesy współbieżne są
                             rozszerzeniem gawk.

       next                  Kończy  przetwarzanie  bieżącego  rekordu   wejściowego.   Następnie
                             odczytywany jest kolejny rekord wejściowy i przetwarzanie rozpoczyna
                             się od pierwszego  wzorca  programu  AWK.  Jeśli  osiągnięto  koniec
                             danych wejściowych, wykonywany jest blok END.

       nextfile              Kończy  przetwarzanie  bieżącego  pliku wejściowego. Następny rekord
                             wejściowy  zostanie  odczytany  z   kolejnego   pliku   wejściowego.
                             Aktualizowane  są wartości FILENAME i ARGIND, zaś FNR jest ustawiane
                             na 1 i przetwarzanie rozpoczyna się od  pierwszego  wzorca  programu
                             AWK. Jeśli osiągnięty zostanie koniec danych wejściowych, wykonywany
                             jest blok END.

       print                 Wypisuje bieżący rekord. Rekord wyjściowy zakończony jest  wartością
                             zmiennej ORS.

       print lista-wyrażeń   Wypisuje   wyrażenia.  Każde  wyrażenie  jest  oddzielone  wartością
                             zmiennej OFS.  Wyjściowy rekord  jest  kończony  wartością  zmiennej
                             ORS.

       print lista-wyrażeń >plik
                             Wypisuje  wyrażenia  do  pliku.   Każde  wyrażenie  jest rozdzielone
                             wartością zmiennej OFS.  Rekord wyjściowy jest zakończony  wartością
                             zmiennej ORS.

       printf fmt, lista-wyrażeń
                             Formatuje i wypisuje.

       printf fmt, lista-wyrażeń >plik
                             Formatuje i wypisuje do pliku.

       system(cmd-line)      Wywołuje polecenie systemowe cmd-line, i zwraca jego status wyjścia.
                             (funkcja może nie być dostępna na systemach nie POSIX-owych.)

       fflush([plik])        Opróżnia bufory związane z otwartym plikiem wynikowym  lub  potokiem
                             plik.  Jeśli pominięto plik, to opróżniane jest standardowe wyjście.
                             Jeżeli  plik  jest  łańcuchem  pustym,  to  opróżniane   są   bufory
                             wszystkich otwartych plików i potoków.

       Dozwolone są też dodatkowe przekierowania wejścia i wyjścia dla print i printf.

       print ... >> plik
              dokleja wyjście do pliku.  a przekierowanie

       print ... | polecenie
              zapisuje do potoku.

       print ... |& polecenie
              wysyła dane do procesu współbieżnego.

       Polecenie getline zwraca zero na końcu pliku, a -1 przy błędzie.  W przypadku błędu, ERRNO
       zawiera łańcuch opisujący problem.

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

   Instrukcja printf
       Wersje AWK instrukcji printf oraz funkcji sprintf() (patrz  niżej)  przyjmują  następujące
       formaty konwersji:

       %c      Znak  ASCII.   Jeśli  argument użyty z %c był numeryczny, to zostanie potraktowany
               jak znak do wypisania.  W przeciwnym  wypadku,  argument  będzie  zrozumiany  jako
               łańcuch i zostanie wypisany tylko pierwszy znak tego łańcucha.

       %d, %i  liczba dziesiętna (część całkowita).

       %e ,  %E
               Liczba zmiennoprzecinkowa w postaci [-]d.ddddddE[+-]dd.  Format %E używa po prostu
               E zamiast e.

       %f      Liczba zmiennoprzecinkowa w postaci [-]ddd.dddddd.

       %g ,  %G
               Używa konwersji e lub f w zależności od  tego,  która  jest  krótsza  i  pomijając
               nieznaczące zera.  Format %G używa E zamiast e.

       %o      Liczba ósemkowa bez znaku (także całkowita).

       %u      Liczba dziesiętna bez znaku (znów, całkowita).

       %s      Ciąg znaków (łańcuch).

       %x ,  %X
               Liczba  szesnastkowa  bez  znaku (całkowita). Format %X używa liter ABCDEF zamiast
               abcdef.

       %%      Pojedynczy znak %; żaden argument nie jest konwertowany.

       Między % a literą sterującą mogą znaleźć się opcjonalne parametry dodatkowe:

       n$     Oznacza  użycie  n-tego  argumentu  w  tym  miejscu   formatowania.    Nosi   nazwę
              specyfikatora  pozycyjnego i jest przeznaczone głównie do użytku w przetłumaczonych
              wersjach łańcuchów formatu, nie  w  oryginalnym  tekście  programu  AWK.   Jest  to
              rozszerzenie gawk.

       -      Wyrażenie w swoim polu powinno być wyrównane do lewej.

       spacja W przypadku konwersji numerycznych, poprzedź wartości dodatnie odstępem, zaś ujemne
              znakiem minus.

       +      Znak plus, użyty przed modyfikatorem  szerokości  (patrz  niżej),  nakazuje  zawsze
              umieszczać znak liczby przy konwersjach numerycznych, nawet jeżeli formatowane dane
              są dodatnie. Modyfikator + powoduje unieważnienie modyfikatora spacji.

       #      Używa “alternatywnej postaci” pewnych liter sterujących.  Dla %o, dodaje początkowe
              zero.   Dla  %x oraz %X dodaje początkowe 0x lub 0X przy niezerowych wynikach.  Dla
              %e, %E oraz %f wynik zawsze zawiera kropkę dziesiętną.  Dla %g i %G z wyniku nie są
              usuwane końcowe zera.

       0      Początkowe   0  (zero)  działa  jako  flaga,  wskazująca,  że  wynik  powinien  być
              uzupełniony  zerami  zamiast  spacji.  Odnosi  się  to  nawet  do   formatów   nie-
              numerycznych.   Flaga  ta  działa tylko wtedy, gdy pole jest szersze niż wartość do
              wypisania.

       width (szerokość)
              Pole powinno być  wypełnione  do  tej  szerokości.  Zwykle  pole  uzupełniane  jest
              spacjami. Jeśli użyto flagi 0, to wypełnienie zostanie dokonane przy użyciu zer.

       .prec (dokładność)
              Liczba określająca dokładność, jaka ma zostać użyta przy wypisywaniu.  Dla formatów
              %e, %E i %f, jest to liczba cyfr, jakie zostaną  wypisane  po  kropce  dziesiętnej.
              Dla  formatów  %g  i %G określa maksymalną liczbą cyfr znaczących. Dla formatów %d,
              %o, %i, %u, %x oraz %X określa minimalną liczbę cyfr do wypisania. Dla %s  jest  to
              maksymalna liczba znaków łańcucha, jakie mają zostać wypisane.

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

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

       /dev/stdin  Standardowe wejście.

       /dev/stdout Standardowe wyjście.

       /dev/stderr Standardowe wyjście diagnostyczne.

       /dev/fd/n   Plik związany z otwartym deskryptorem pliku n.

       Są one szczególnie przydatne do komunikatów o błędach. Na przykład:

              print "Spieprzyłeś to!" > "/dev/stderr"

       podczas gdy w przeciwnym wypadku musiałbyś użyć

              print "Spieprzyłeś to!" | "cat 1>&2"

       Poniższych specjalnych nazw plików można używać z operatorem procesu współbieżnego  |&  do
       tworzenia witrualnych połączeń sieciowych TCP/IP.

       /inet/tcp/lport/rhost/rport  Plik  dla  połączenia  TCP/IP  na  lokalnym  porcie  lport do
                                    zdalnej maszyny rhost na zdalnym porcie rport.  Użyj portu 0,
                                    jeśli chcesz, by to system znalazł port.

       /inet/udp/lport/rhost/rport  Podobne, lecz używa UDP/IP zamiast TCP/IP.

       /inet/raw/lport/rhost/rport  Zarezerwowane do przyszłego użytku.

       Inne specjalne nazwy plików zapewniające informacje o działającym procesie gawk.  Te nazwy
       plików  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  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.

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia  Manuali  i  może
       nie  być  aktualne.  W  razie  zauważenia  różnic  między  powyższym opisem a rzeczywistym
       zachowaniem opisywanego programu lub  funkcji,  prosimy  o  zapoznanie  się  z  oryginalną
       (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 1 gawk

       Prosimy  o  pomoc  w  aktualizacji stron man - więcej informacji można znaleźć pod adresem
       http://sourceforge.net/projects/manpages-pl/.