GAWK(1) Narzedzia GAWK(1) NAZWA gawk - jezyk wyszukiwania i przetwarzania wzorcow SKLADNIA gawk [ opcje w stylu POSIX lub GNU ] -f plik-programu [ -- ] plik ... gawk [ opcje w stylu POSIX lub GNU ] [ -- ] tekst-programu plik ... OPIS Gawk jest implementacja GNU jezyka programowania AWK. Odpowiada on definicji tego jezyka z POSIX 1003.1. Wersja ta jest z kolei oparta na opisie z The AWK Programming Language, napisanym przez Aho, Kernighana i Weinbergera. Gawk udostepnia dodatkowe funkcje z biezacej wersji awk Briana Kernighana oraz wiele rozszerzen charakterystycznych dla GNU. Wiersz polecen sklada sie z opcji dla gawk, tekstu programu (jesli nie podano go poprzez opcje -f lub --include) i wartosci, ktore maja byc udostepnione w predefiniowanych zmiennych ARGC i ARGV. WSTEP Niniejsza strona podrecznika jest bardzo zwiezla. Wszystkie szczegoly opisano w GAWK: Efektywne programowanie w AWK i nalezy sie z nim zapoznac aby poznac pelny opis danej funkcji. Tam, gdzie to mozliwe, zamieszczone sa odnosniki do wersji online tego podrecznika. FORMAT OPCJI Opcje gawk moga byc zarowno tradycyjnymi POSIX-owymi jednoliterowymi opcjami, jak i dlugimi opcjami w stylu GNU. Opcje POSIX-owe zaczynaja sie pojedynczym "-", a opcje GNU "--". Opcje w stylu GNU sa udostepniane zarowno dla wlasciwosci specyficznych dla GNU, jak i dla wlasciwosci POSIX-owych. Inne implementacje AWK prawdopodobnie jednak beda przyjmowac tylko tradycyjne, jednoliterowe opcje. Opcje specyficzne dla gawk sa uzywane zwykle w dlugiej postaci. Argumenty przekazywane dlugim opcjom w stylu GNU sa laczone z opcja przy uzyciu znaku =, bez dodatkowych spacji lub przekazywane w nastepnym argumencie wiersza polecen (tj. bez znaku rownosci i po spacji). Oprocz tego, kazda dluga opcja ma odpowiadajaca jej opcje krotka, dzieki czemu funkcjonalnosc danej opcji moze byc uzywana ze skryptow wykonywalnych #!. OPCJE Gawk akceptuje nastepujace opcje. Najpierw podane sa opcje standardowe, nastepnie opcje do rozszerzen gawk, ulozone alfabetycznie wedlug krotkiej opcji. -f program-file, --file plik-programu Odczytuje zrodlo programu AWK z pliku plik-programu, zamiast odczytywac go z pierwszego argumentu wiersza polecen. Mozna uzyc wielu opcji -f. Pliki odczytywane za pomoca -f sa traktowane w ten sposob, jak gdyby zaczynaly sie wyrazeniem @namespace "awk". -F fs, --field-separator fs Uzywa fs jako wejsciowego separatora pola (wartosc predefiniowanej zmiennej FS). -v var=val, --assign var=val Przyznaje zmiennej var wartosc val. Robi to przed uruchomieniem programu. Takie wartosci zmiennych sa dostepne dla reguly BEGIN programu AWK. -b, --characters-as-bytes Traktuje wszelkie dane wejsciowe jako znaki jednobajtowe. Niniejsza opcje przeslania opcja --posix. -c, --traditional Pracuje w trybie zgodnosci. W trybie tym, gawk zachowuje sie identycznie z awk Briana Kernighana; nie jest rozpoznawane zadne ze specyficznych dla GNU rozszerzen. -C, --copyright Wypisuje krotka wersje informacji o prawach autorskich GNU na standardowe wyjscie i pomyslnie konczy dzialanie. -d[plik], --dump-variables[=plik] Wypisuje do pliku posortowana liste zmiennych globalnych, ich typow i koncowych wartosci. Domyslnym plikiem jest awkvars.out w katalogu biezacym. -D[plik], --debug[=plik] Wlacza debugowanie programow AWK. Domyslnie, debuger odczytuje polecenia interaktywnie z klawiatury (standardowego wejscia). Opcjonalny argument plik okresla plik z lista polecen do debugera, w celu wykonania ich nieinteraktywnie. W tym trybie wykonania, gawk laduje kod zrodlowy AWK i czeka na polecenia debugowania. Gawk moze debugowac jedynie zrodla programu AWK przekazane opcjami -f i --include. Debuger udokumentowano w GAWK: Efektywne programowanie w AWK; zob. https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger. -e tekst-programu, --source tekst-programu Uzywa tekstu-programu jako kodu zrodlowego AWK. Kazdy argument podany za pomoca opcji -e jest traktowana tak, jak gdyby zaczynala sie instrukcja @namespace "awk". -E plik, --exec plik Podobnie jednak do -f, opcja ta jest przetwarzana na koncu. Powinna byc uzywana w skryptach #!, szczegolnie w przypadku aplikacji CGI, aby unikac przekazywania opcji lub kodu zrodlowego (!) w wierszu polecen z URL-a. Opcja ta wylacza przypisania zmiennych wiersza polecen. -g, --gen-pot Przeglada i analizuje program AWK program, i tworzy na standardowym wyjsciu plik formatu GNU .pot (Portable Object Template), zawierajacy wpisy dla wszystkich podlegajacych lokalizacji lancuchow w programie. Sam program nie jest wykonywany. -h, --help Wypisuje na standardowe wyjscie krotkie podsumowanie dostepnych opcji. Zgodnie z GNU Coding Standards, te opcje powoduja natychmiastowe, pomyslne zakonczenie pracy. -i plik-do-wlaczenia, --include plik-do-wlaczenia Laduje biblioteke zrodlowa awk. Wyszukiwanie biblioteki ma miejsce za pomoca zmiennej srodowiskowej AWKPATH. Jesli pierwotne wyszukiwanie zawiedzie, kolejne bedzie wykonane po dolaczeniu przyrostka .awk. Plik bedzie zaladowany jednokrotnie (tj. eliminowane sa duplikaty), a kod nie tworzy zrodla glownego programu. Pliki odczytywane za pomoca --include sa traktowane tak, jak gdyby zaczynaly sie instrukcja @namespace "awk". -I, --trace Wypisuje wewnetrzne nazwy kodow bajtowych w trakcie ich wykonywania, przy dzialajacym programie. Slad jest wypisywany na standardowe wyjscie bledow. Kazdy ,,kod operacji" (,,op code") jest poprzedzany na wyjsciu znakiem +. -k, --csv Wlacza specjalne przetwarzanie CSV. Zob. Wartosci rozdzielone przecinkiem (CSV) ponizej, aby dowiedziec sie wiecej. -l biblioteka, --load biblioteka Laduje rozszerzenie gawk z biblioteki wspoldzielonej. Wyszukiwanie biblioteki ma miejsce za pomoca zmiennej srodowiskowej AWKLIBPATH. Jesli pierwotne wyszukiwanie zawiedzie, kolejne bedzie wykonane po dolaczeniu domyslnego przyrostka (rozszerzenia) biblioteki wspoldzielonej dla danej platformy. Oczekuje sie, ze procedura inicjalizacji biblioteki bedzie miala nazwe dl_load(). -L [wartosc], --lint[=wartosc] Zapewnia ostrzezenia o konstrukcjach, ktore sa watpliwe lub nieprzenosne na inne implementacje AWK. Lista dopuszczalnych wartosci jest dostepna pod adresem https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options. -M, --bignum Wymusza korzystanie z arytmetyki liczb o dowolnej precyzji. Opcja ta nie odniesie skutku, jesli nie skompilowano gawk z obsluga bibliotek GMP i MPFR GNU (w takim przypadku gawk wypisze ostrzezenie). UWAGA: Funkcja ta istnieje warunkowo. Glowny opiekun gawk sie nie zajmuje, jednak robi to jeden z czlonkow zespolu deweloperskiego. Jesli sytuacja ulegnie zmianie na niekorzysc, funkcja zostanie usunieta z gawk. -n, --non-decimal-data Rozpoznaje wartosci osemkowe i szesnastkowe w danych wejsciowych. Opcji tej nalezy uzywac ze szczegolna ostroznoscia! -N, --use-lc-numeric Zmusza gawk do korzystania ze znaku dziesietnego z locale (ustawien jezykowych), przy przetwarzaniu danych wejsciowych. -o[plik], --pretty-print[=plik] Wypisuje wersje programu sformatowana za pomoca pretty-print do pliku. Domyslnym plikiem jest awkprof.out w biezacym katalogu. Opcja ta wymusza --no-optimize. -O, --optimize Wlacza domyslne optymalizacje gawka wobec wewnetrznej reprezentacji programu. Opcja domyslnie wlaczona. -p[plik-prof], --profile[=plik-prof] Rozpoczyna sesje profilowania i wysyla dane profilowania do pliku-prof. Domyslnie jest to awkprof.out w biezacym katalogu. Profil zawiera liczbe wykonan kazdej instrukcji programu (na lewym marginesie) oraz liczbe wywolan funkcji dla kazdej funkcji uzytkownika. W tym trybie gawk dziala wolniej. Opcja wymusza --no-optimize. -P, --posix Wlacza tryb zgodnosci i wylacza wiele podstawowych rozszerzen. -r, --re-interval Wlacza uzycie wyrazen przedzialowych (interval expressions) w dopasowaniu wyrazen regularnych. Wyrazenia przedzialowe sa domyslnie wlaczone, a opcja ta pozostaje ze wzgledu na kompatybilnosc wsteczna. -s, --no-optimize Wylacza domyslne optymalizacje gawka wobec wewnetrznej reprezentacji programu. -S, --sandbox Uruchamia gawk w trybie piaskownicy, wylaczajac funkcje system(), przekierowanie wejscia za pomoca getline, przekierowania wyjscia za pomoca print i printf oraz ladowanie rozszerzen dynamicznych. Wykonywanie polecen (poprzez potoki) rowniez jest wylaczone. -t, --lint-old Daje ostrzezenia o konstrukcjach, ktore nieprzenosne na pierwotna wersje UNIX awk. -V, --version Wypisuje na standardowe wyjscie informacje o danej kopii programu gawk. Jest to przydatne przy zglaszaniu bledow. Zgodnie z GNU Coding Standards, te opcje powoduja natychmiastowe, pomyslne zakonczenie pracy. -- Sygnalizuje koniec opcji. Dzieki temu nastepne argumenty programu AWK moga rozpoczynac sie myslnikiem ,,-". [Na przyklad rozpoczynajace sie myslnikiem nazwy plikow]. W trybie zgodnosci wszelkie inne opcje sa zaznaczane jako niepoprawne, lecz poza tym sa ignorowane. W normalnym trybie dzialania, jesli dostarczono tekst programu AWK, nieznane opcje sa mu przekazywane w tablicy ARGV, aby mogl je sobie sam przetworzyc. Ze wzgledu na kompatybilnosc z POSIX, mozna skorzystac z opcji -W, po ktorej nalezy podac nazwe dlugiej opcji. WYWOLANIE PROGRAMU AWK Program AWK sklada sie z sekwencji opcjonalnych dyrektyw, instrukcji wzorzec-akcja oraz opcjonalnych definicji funkcji. @include "nazwa_pliku" @load "nazwa_pliku" @namespace "nazwa" wzorzec { instrukcje akcji } function nazwa(lista parametrow) { instrukcje } Gawk first reads the program source from the program-file(s) if specified, from arguments to --source, or from the first non-option argument on the command line. The -f and --source options may be used multiple times on the command line. Gawk reads the program text as if all the program-files and command line source texts had been concatenated together. In addition, lines beginning with @include may be used to include other source files into your program. This is equivalent to using the --include option. Lines beginning with @load may be used to load extension functions into your program. This is equivalent to using the --load option. The environment variable AWKPATH specifies a search path to use when finding source files named with the -f and --include options. If this variable does not exist, the default path is ".:/usr/local/share/awk". (The actual directory may vary, depending upon how gawk was built and installed.) If a file name given to the -f option contains a "/" character, no path search is performed. The environment variable AWKLIBPATH specifies a search path to use when finding source files named with the --load option. If this variable does not exist, the default path is "/usr/local/lib/gawk". (The actual directory may vary, depending upon how gawk was built and installed.) Gawk executes AWK programs in the following order. First, all variable assignments specified via the -v option are performed. Next, gawk compiles the program into an internal form. Then, gawk executes the code in the BEGIN rule(s) (if any), and then proceeds to read each file named in the ARGV array (up to ARGV[ARGC-1]). If there are no files named on the command line, gawk reads the standard input. If a filename on the command line has the form var=val it is treated as a variable assignment. The variable var will be assigned the value val. (This happens after any BEGIN rule(s) have been run.) Jesli wartosc konkretnego elementu ARGV jest pusta (""), to gawk ja pomija. For each input file, if a BEGINFILE rule exists, gawk executes the associated code before processing the contents of the file. Similarly, gawk executes the code associated with ENDFILE rules after processing the file. For each record in the input, gawk tests to see if it matches any pattern in the AWK program. For each pattern that the record matches, gawk executes the associated action. The patterns are tested in the order they occur in the program. Finally, after all the input is exhausted, gawk executes the code in the END rule(s) (if any). Command Line Directories According to POSIX, files named on the awk command line must be text files. The behavior is "undefined" if they are not. Most versions of awk treat a directory on the command line as a fatal error. For gawk, a directory on the command line produces a warning, but is otherwise skipped. If either of the --posix or --traditional options is given, then gawk reverts to treating directories on the command line as a fatal error. ZMIENNE, REKORDY I POLA AWK variables are dynamic; they come into existence when they are first used. Their values are either floating-point numbers or strings, or both, depending upon how they are used. Additionally, gawk allows variables to have regular-expression type. AWK also has one dimensional arrays; arrays with multiple dimensions may be simulated. However, gawk provides true arrays of arrays. Several pre-defined variables are set as a program runs; these are described as needed and summarized below. Rekordy Rekordy sa zwykle rozdzielone znakami nowego wiersza. Mozna to zmienic przypisujac wartosci wbudowanej zmiennej RS. Wiecej szczegolow na stronie https://www.gnu.org/software/gawk/manual/html_node/Records.html. Pola Przy odczytywaniu kazdego rekordu wejsciowego, gawk dzieli rekord na pola za pomoca wartosci zmiennej FS sluzacej jako separator pol. Dodatkowo, zmiennymi FIELDWIDTHS i FPAT mozna kontrolowac dzielenie pol wejsciowych. Wiecej szczegolow opisano, poczawszy od strony https://www.gnu.org/software/gawk/manual/html_node/Fields.html. Do kazdego pola w rekordzie wejsciowym mozna odwolac sie przez jego pozycje: $1, $2, itd. $0 jest calym rekordem, lacznie z poczatkowymi i koncowymi bialymi znakami. Zmienna NF jest ustawiana na calkowita liczbe pol w rekordzie wejsciowym. References to non-existent fields (i.e., fields after $NF) produce the null string. However, assigning to a non-existent field (e.g., $(NF+2) = 5) increases the value of NF, creates any intervening fields with the null string as their values, and causes the value of $0 to be recomputed, with the fields being separated by the value of OFS. References to negative numbered fields cause a fatal error. Decrementing NF causes the values of fields past the new value to be lost, and the value of $0 to be recomputed, with the fields being separated by the value of OFS. Przypisanie wartosci istniejacemu polu powoduje ponowne utworzenie calego rekordu podczas odwolania sie do $0. Podobnie, przypisanie wartosci do $0 powoduje, ze rekord jest ponownie dzielony, tworzac nowe wartosci pol. Wartosci rozdzielone przecinkiem (CSV) When invoked with ether the -k or the --csv option, gawk does not use regular record determination and field splitting as described above. Instead, records are terminated by unquoted newlines, and fields are separated by commas. Double-quotes may be used to enclose fields containing commas, newlines, or doubled double-quotes. See https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html for more details. Wbudowane zmienne Ponizej wypisano wbudowano zmienne programu gawk. Lista ta jest celowo zwiezla. Wiecej szczegolow opisano na stronie https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables. ARGC Liczba argumentow wiersza polecen. ARGIND Indeks w tablicy ARGV biezaco przetwarzanego pliku. ARGV Tablica argumentow wiersza polecen. Tablica ta jest indeksowana od 0 do ARGC - 1. BINMODE Na systemach nie-POSIX-owych, okresla uzycie trybu ,,binarnego" do wszystkich operacji wejscia/wyjscia plikow. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html. CONVFMT Format konwersji dla liczb, domyslnie "%.6g". ENVIRON Tablica zawierajaca wartosci biezacego srodowiska. Tablica ta jest indeksowana zmiennymi srodowiskowymi, kazdy element tablicy jest wartoscia danej zmiennej. ERRNO Jesli pojawi sie blad systemowy podczas przekierowywania dla getline, podczas odczytu dla getline lub podczas close(), to ERRNO jest ustawiana na lancuch opisujacy blad. Podlega on tlumaczeniu przy ustawieniach locale innych niz angielskie. FIELDWIDTHS Jest rozdzielona bialymi znakami lista szerokosci pol. Jesli zmienna ta jest ustawiona, to gawk rozbija wejscie na pola o stalych szerokosciach (domyslnie rozbija je wedlug wartosci separatora FS). Kazda szerokosc pola mozna opcjonalnie poprzedzic wartosciami rozdzielonymi dwukropkiem, okreslajacymi liczbe znakow do pominiecia, przed rozpoczeciem pola. FILENAME Nazwa pliku biezacego pliku wejsciowego. Jesli nie podano plikow w wierszu polecen, FILENAME przechowuje wartosc ,,-". Wartosc zmiennej FILENAME jest niezdefiniowana wewnatrz reguly BEGIN (chyba ze zostanie nadana przez getline). FNR Liczba rekordow wejsciowych w biezacym pliku wejsciowym. FPAT Wyrazenie regularne opisujace zawartosc pol w rekordzie. Jesli zmienna ta jest ustawiona, to gawk przetwarza wejscie na pola pasujace do wyrazenia regularnego, zamiast uzywac wartosci FS jako separatora pol. FS Separator pol wejsciowych, domyslnie spacja. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html. FUNCTAB Tablica, ktorej indeksy i powiazane wartosci sa nazwami wszystkich zdefiniowanych przez uzytkownika lub bedacych rozszerzeniami funkcjami w programie. UWAGA: w tablice FUNCTAB nie mozna uzywac instrukcji delete. IGNORECASE Kontroluje wrazliwosc na wielkosc znakow wszystkich wyrazen regularnych i operacji na lancuchach tekstowych. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html. LINT Zapewnia dynamiczna kontrole opcji --lint z wnetrza programu AWK. NF Liczba pol w biezacym rekordzie wejsciowym. NR Calkowita liczba odczytanych do tej pory rekordow wejsciowych. OFMT Format wyjsciowy liczb, domyslnie "%.6g". OFS Separator pol wyjsciowych, domyslnie spacja. ORS Separator rekordow wyjsciowych, domyslnie nowa linia. PREC Robocza precyzja liczb zmiennoprzecinkowych o dowolnej precyzji, domyslnie 53. PROCINFO Elementy tej tablicy zapewniaja dostep do informacji o dzialajacym programie AWK. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset. ROUNDMODE Tryb zaokraglania w przypadku arytmetyki liczb o dowolnej precyzji, domyslnie "N" (tryb roundTiesToEven IEEE-754). Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode. RS Separator rekordow wejsciowych, domyslnie nowy wiersz. RT Zakonczenie rekordu. Gawk ustawia RT na tekst wejsciowy, ktory pasowal do znaku lub wyrazenia regularnego okreslonego przez RS. RSTART Indeks pierwszego znaku dopasowanego funkcja match(); 0 w przypadku braku dopasowania. RLENGTH Dlugosc lancucha dopasowanego funkcja match(); -1 w przypadku braku dopasowania. SUBSEP Lancuch, uzywany do rozdzielania wielokrotnych indeksow w elementach tablicowych, domyslnie jest to "\034". SYMTAB An array whose indices are the names of all currently defined global variables and arrays in the program. You may not use the delete statement with the SYMTAB array, nor assign to elements with an index that is not a variable name. TEXTDOMAIN Dziedzina tekstowa programu AWK. Stosowane od odszukania zlokalizowanych tlumaczen lancuchow znakowych programu. Tablice Tablice sa indeksowane wyrazeniem, ujetym w nawiasy kwadratowe ([ i ]). Jesli wyrazenie jest lista wyrazen (wyraz, wyraz ...) to indeks tablicy jest sklejany z wartosci (lancuchowych) kazdego wyrazenia, oddzielonych wartoscia zmiennej SUBSEP. [Uwaga: jest tak dlatego, ze AWK uzywa tablic asocjacyjnych - tak jakby slownikowych - nie ma tu normalnych liczbowych indeksow - indeksem moze byc cokolwiek, najczesciej lancuch. Symulowanie tablic wielowymiarowych polega wlasnie na sklejaniu poszczegolnych indeksow w unikalny lancuch -- przyp. tlum.] Wlasciwosc ta jest uzywana do symulacji wielowymiarowych tablic. Na przyklad: i = "A"; j = "B"; k = "C" x[i, j, k] = "hello, world\n" przypisuje lancuch "hello, world\n" elementowi tablicy x, o indeksie bedacym lancuchem "A\034B\034C". Wszystkie tablice w AWK sa asocjacyjne, tj. indeksowane wartosciami lancuchowymi. The special operator in may be used to test if an array has an index consisting of a particular value: if (val in array) print array[val] Jesli tablica posiada wielokrotne indeksy, mozna uzyc konstrukcji (i, j) in array. Konstrukcja in moze byc rowniez uzyta w petli for do iterowania poprzez wszystkie elementy tablicy [poniewaz jest ona asocjacyjna, nie mozna jej iterowac przez przelecenie indeksu od zera do najwyzszej wartosci - indeks moze byc tu przeciez dowolnym lancuchem - przyp. tlum.]. Jednak konstrukcja (i, j) in array dziala tylko w testach, nie w petlach for. Element mozna skasowac z tablicy przy uzyciu polecenia delete. Poleceniem delete mozna sie tez posluzyc do skasowania calej zawartosci tablicy, przez podanie jej nazwy bez indeksu. gawk obsluguje prawdziwe tablice wielowymiarowe. Nie wymaga, aby byly one ,,prostokatne", jak w C lub C++. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Arrays. Przestrzenie nazw Gawk obsluguje uproszczona funkcjonalnosc przestrzeni nazw, aby pomoc obejsc ograniczenia, wynikajace z tego, ze wszystkie zmienne w AWK sa globalne. Nazwa kwalifikowalna sklada sie z dwoch prostych identyfikatorow polaczonych podwojnym dwukropkiem (::). Lewa strona identyfikatora reprezentuje przestrzen nazw, a prawa -- jej zmienna. Wszystkie proste (niekwalifikowalne) nazwy sa uwazane za znajdujace sie w ,,biezacej" przestrzeni nazw; domyslna przestrzenia nazw jest awk. Jednak proste identyfikatory skladajace sie jedynie z wielkich liter sa zawsze przypisywane przestrzeni nazw awk, nawet jesli biezaca przestrzen nazw jest inna. Mozna zmienic biezaca przestrzen nazw za pomoca dyrektywy @namespace "nazwa". Standardowe, predefiniowane nazwy funkcji wbudowanych nie moga byc uzyte jako nazwy przestrzeni nazw. Nazwy dodatkowych funkcji zapewnianych przez gawk moga byc uzywane jako przestrzenie nazw lub jako proste identyfikatory w innych przestrzeniach nazw. Wiecej szczegolow opisano pod adresem https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces. Typy zmiennych i konwersje Zmienne oraz pola moga byc liczbami (zmiennoprzecinkowymi), lancuchami lub jednym i drugim naraz. Moga byc tez wyrazeniami regularnymi. Interpretacja wartosci zmiennej zalezy od kontekstu. Jesli jest uzyta w wyrazeniu numerycznym, jest interpretowana jako liczba; jesli jest uzyta w wyrazeniu lancuchowym, to jest traktowana jak lancuch. Aby wymusic traktowanie zmiennej jako liczby, nalezy do niej dodac zero; aby wymusic traktowanie jej jako lancucha, nalezy dokleic do niej lancuch zerowy. Niezainicjowane zmienne maja wartosc numeryczna zero i lancuchowa "" (zero lub pusty lancuch). Podczas konwersji lancucha na liczbe, obrobka jest dokonywana przy uzyciu funkcji strtod(3). Liczba jest przeksztalcana na lancuch przy uzyciu wartosci CONVFMT jako parametru formatujacego dla sprintf(3), oraz wartosci numerycznej jako argumentu. Jednak, nawet mimo ze wszystkie liczby w AWK sa zmiennoprzecinkowe, wartosci calkowite sa zawsze konwertowane jak calkowite (integer). Gawk dokonuje porownan w nastepujacy sposob: Jesli dwie wartosci sa numeryczne, to sa porownywane numerycznie. Jesli jedna z wartosci jest numeryczna, a druga lancuchowa, ktora jest "lancuchem numerycznym", to porownania sa rowniez dokonywane numerycznie. W przeciwnym wypadku wartosc numeryczna jest konwertowana do lancucha i dokonywane jest porownanie lancuchowe. Dwa lancuchy sa, oczywiscie, porownywane jako lancuchy. Zauwaz, ze stale znakowe, takie jak "57" nie sa lancuchami numerycznymi - sa one stalymi lancuchowymi. Pojecie ,,lancuchow numerycznych" odnosi sie wylacznie do pol, wejscia getinput, FILENAME, elementow ARGV, ENVIRON i elementow tablicy utworzonej funkcja split() lub patsplit(), bedacych lancuchami numerycznymi. Podstawowa koncepcja jest to, ze wygladajace na numeryczne dane z wejscia uzytkownika, i tylko one, sa traktowane w opisany sposob. Stale osemkowe i szesnastkowe W kodzie zrodlowym programow AWK mozna korzystac ze stalych osemkowych i szesnastkowych w stylu jezyka C. Na przyklad, osemkowa wartosc 011 jest rowna dziesietnej 9, a szesnastkowa 0x11 jest rowna dziesietnej 17. Stale lancuchowe Stale lancuchowe w AWK sa sekwencjami znakow ujetymi w cudzyslowy (jak "wartosc"). Wewnatrz lancuchow rozpoznawane sa pewne sekwencje specjalne, jak w C. Wiecej szczegolow pod adresem https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences. Stale wyrazen regularnych Stala wyrazenia regularnego jest sekwencja znakow ujetych pomiedzy ukosniki (jak /wartosc/). Sekwencji specjalnych opisanych w podreczniku mozna tez uzywac wewnatrz stalych wyrazen regularnych (np., /[ \t\f\n\r\v]/ dopasowuje biale znaki). Gawk zapewnia stale wyrazen regularnych ze scisla kontrola typow. Sa one zapisywane z poczatkowym symbolem @ (jak: @/wartosc/). Takie zmienne moga byc przypisane do wartosci skalarnych (zmiennych, elementow tablicy) i przekazywane do funkcji zdefiniowanych przez uzytkownika. Przypisane w ten sposob zmienne maja zwykly typ wyrazenia regularnego. WZORCE I AKCJE AWK jest jezykiem zorientowanym liniowo. Najpierw przychodzi wzorzec, a potem akcja. Instrukcje akcji sa zawarte w nawiasach { i }. Pominac mozna zarowno wzorzec, jak i akcje, lecz oczywiscie nie obydwa te pola naraz. Jesli pominieto wzorzec, to akcja jest wykonywana dla kazdego z rekordow wejscia. Brakujaca akcja jest z kolei rownowazna akcji { print } ktora wypisuje caly rekord. Komentarze rozpoczynaja sie znakiem # i trwaja az do konca wiersza. Do oddzielania instrukcji mozna uzywac pustych wierszy. Zwykle instrukcja konczy sie wraz z nowym wierszem, jednak nie jest to regula w przypadku wierszy konczacych sie na przecinek, {, ?, :, && lub ||. Dla wierszy konczacych sie na do lub else rowniez wystapi automatyczna kontynuacja instrukcji w nastepnym wierszu. W innych przypadkach, wiersz moze byc kontynuowany przez zakonczenie go znakiem ,,\"; w takim wypadku znak nowego wiersza jest ignorowany. Jednak ,,\" po znaku # nie jest traktowane w specjalny sposob. Wiele instrukcji mozna tez zgrupowac w jednym wierszu, oddzielajac je znakiem ,,;". Tyczy sie to zarowno instrukcji w czesci akcji z pary wzorzec-akcja (zwykly przypadek), jak i do samych instrukcji wzorzec-akcja. Wzorce Wzorce w AWK moga byc jedna z nastepujacych rzeczy: BEGIN END BEGINFILE ENDFILE /wyrazenie regularne/ wyrazenie relacyjne wzorzec && wzorzec wzorzec || wzorzec wzorzec ? wzorzec : wzorzec (wzorzec) ! wzorzec wzorzec1, wzorzec2 BEGIN i END sa dwoma specjalnymi rodzajami wzorcow, ktore nie sa porownywane z danymi wejsciowymi. Czesci akcji wszelkich wzorcow BEGIN sa laczone, tak jakby wszystkie one zostaly napisane w pojedynczej regule BEGIN. Sa one wykonywane przed rozpoczeciem odczytywania danych wejsciowych. Podobnie, wszelkie reguly END sa rowniez laczone i wykonywane po wyczerpaniu danych wejsciowych. (lub po dojsciu do instrukcji exit.) Wzorce BEGIN i END nie moga byc laczone z innymi wzorcami w wyrazeniach wzorcowych. Wzorcom BEGIN i END nie moze brakowac czesci definiujacej akcje. BEGINFILE and ENDFILE are additional special patterns whose actions are executed before reading the first record of each command-line input file and after reading the last record of each file. Inside the BEGINFILE rule, the value of ERRNO is the empty string if the file was opened successfully. Otherwise, there is some problem with the file and the code should use nextfile to skip it. If that is not done, gawk produces its usual fatal error for files that cannot be opened. Dla wzorcow /wyrazen regularnych/ powiazana instrukcja wykonywana jest dla kazdego rekordu wejsciowego, ktory odpowiada zadanemu wyrazeniu regularnemu. Wyrazenia regularne sa w gruncie rzeczy tymi samymi wyrazeniami, ktore mozna spotkac w egrep(1). Wiecej informacji o wyrazeniach regularnych znajduje sie na stronie https://www.gnu.org/software/gawk/manual/html_node/Regexp.html. wyrazenie relacyjne moze uzywac dowolnego operatora ze zdefiniowanych w sekcji o akcjach operatorow. Ogolnie, testuja one, czy okreslone pola odpowiadaja okreslonym wyrazeniom regularnym. Operatory &&, ||, i ! sa logicznymi AND, OR i NOT, podobnie jak w jezyku C. Sa one obliczane w sposob skrocony, podobnie jak w C, i sluza glownie do laczenia bardziej podstawowych wyrazen wzorcowych. Podobnie jak w wiekszosci jezykow, dla wymuszenia kolejnosci porownywania mozna uzyc nawiasow. Operator ?: dziala podobnie jak ten sam operator w C. Jesli pierwszy wzorzec jest prawdziwy, to do testowania uzywany jest nastepny wzorzec; w przeciwnym wypadku uzywany jest trzeci wzorzec. Obliczany jest tylko albo drugi albo trzeci wzorzec. Forma wzorzec1, wzorzec2 wyrazenia jest nazywana wzorcem zakresu. Dopasowuje ona wszystkie rekordy wejscie, poczynajac od rekordu, ktory odpowiada wzorcowi1, az do rekordu pasujacego do wzorzec2, wlacznie. Nie laczy sie to z innymi rodzajami wyrazen wzorcowych. Akcje Instrukcje akcji sa zawarte w nawiasach { i }. Instrukcje akcji skladaja sie ze zwyczajnych instrukcji przypisania, warunkow i instrukcji petli, ktore mozna znalezc w wiekszosci innych jezykow programowania. Operatory, instrukcje sterujacymi, a takze instrukcje wejscia/wyjscia sa opracowane na podstawie tych, spotykanych w jezyku C. Operatory Operatory w AWK, w kolejnosci malejacego priorytetu, to (...) Grupowanie $ Odniesienie sie do pola. ++ -- Inkrementuj i dekrementuj. Zarowno przedrostkowe i przyrostkowe. ^ Potegowanie. + - ! Jednoargumentowy plus, minus i logiczna negacja. * / % Mnozenie, dzielenie i modulo (reszta dzielenia). + - Dodawanie i odejmowanie. odstep Konkatenacja (zlaczenie) lancuchow. | |& Przekierowanie wejscia/wyjscia potokiem dla getline, print i printf. < > <= >= == != Regularne operatory relacyjne. ~ !~ Dopasowanie wyrazenia regularnego, wyrazenie przeciwne. in Przynaleznosc do tablicy. && Koniunkcja logiczna AND. || Alternatywa logiczna OR. ?: Wyrazenie warunkowe z C. Ma ono postac wyraz1 ? wyraz2 : wyraz3. Jesli wyraz1 jest prawdziwe, to wartoscia wyrazenia jest wyraz2, w przeciwnym wypadku jest nia wyraz3. Obliczane jest wylacznie jedno z wyraz2 i wyraz3. = += -= *= /= %= ^= Przypisanie. Obslugiwane jest zarowno przypisanie absolutne (zmienna = wartosc) jak i przypisanie operatorowe (inne formy). Instrukcje sterujace Instrukcje sterujace sa nastepujace: if (warunek) instrukcja [ else instrukcja ] while (warunek) instrukcja do instrukcja while (warunek) for (wyraz1; wyraz2; wyraz3) instrukcja for (var in tablica) instrukcja break continue delete tablica[indeks] delete tablica exit [ wyrazenie ] { instrukcje } switch (wyrazenie) { case wartosc|wyraz-regul : instrukcja ... [ default: instrukcja ] } Instrukcje I/O Instrukcje I/O sa nastepujace: close(plik [, jak]) Zamyka otwarty plik, potok lub proces wspolbiezny (co-process). Opcjonalnego jak powinno sie uzywac wylacznie do zamykania jednego konca dwukierunkowego potoku do procesu wspolbieznego. Musi to byc wartosc lancuchowa, albo "to" albo "from". getline Ustawia $0 z nastepnego rekordu wejsciowego; ustawia NF, NR, FNR, RT. getline plik Wypisuje wyrazenia do pliku. Kazde wyrazenie jest rozdzielone wartoscia OFS. Rekord wyjsciowy jest zakonczony wartoscia ORS. printf fmt, lista-wyrazen Formatuje i wypisuje/ printf fmt, lista-wyrazen >plik Formatuje i wypisuje do pliku. system(cmd-line) Wywoluje polecenie systemowe cmd-line, i zwraca jego status wyjscia. (funkcja moze nie byc dostepna na systemach nie POSIX-owych). Pelne informacje o statusie zakonczenia sa dostepne pod adresem https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions. Dozwolone sa tez dodatkowe przekierowania wejscia i wyjscia dla print i printf. print ... >> plik Dokleja wyjscie do pliku. print ... | polecenie Zapisuje do potoku. print ... |& polecenie Send data to a coprocess or socket. (See also the subsection Special File Names, below.) The getline command returns 1 on success, zero on end of file, and -1 on an error. If the errno(3) value indicates that the I/O operation may be retried, and PROCINFO["input", "RETRY"] is set, then -2 is returned instead of -1, and further calls to getline may be attempted. Upon an error, ERRNO is set to a string describing the problem. NOTE: Failure in opening a two-way socket results in a non-fatal error being returned to the calling function. If using a pipe, coprocess, or socket to getline, or from print or printf within a loop, you must use close() to create new instances of the command or socket. AWK does not automatically close pipes, sockets, or coprocesses when they return EOF. The AWK versions of the printf statement and sprintf() function are similar to those of C. For details, see https://www.gnu.org/software/gawk/manual/html_node/Printf.html. Specjalne nazwy plikow Podczas przekierowan I/O przy uzyciu print czy tez printf do pliku, albo przy uzyciu getline z pliku, gawk rozpoznaje wewnetrznie pewne specjalne nazwy plikow. Te nazwy plikow umozliwiaja dostep do otwartych deskryptorow plikow, dziedziczonych po procesie rodzicielskim gawk'a (zazwyczaj powloce). Inne pliki specjalne zapewniaja dostep do informacji o uruchomionym procesie gawk. Z tych specjalnych nazw plikow mozna rowniez korzystac w wierszu polecen do okreslania plikow danych. Te nazwy to: - Standardowe wejscie. /dev/stdin Standardowe wejscie. /dev/stdout Standardowe wyjscie. /dev/stderr Standardowe wyjscie diagnostyczne. /dev/fd/n Plik zwiazany z otwartym deskryptorem pliku n. Ponizszych specjalnych nazw plikow mozna uzywac z operatorem procesu wspolbieznego |& do tworzenia witrualnych polaczen sieciowych TCP/IP: /inet/tcp/lport/rhost/rport /inet4/tcp/lport/rhost/rport /inet6/tcp/lport/rhost/rport Files for a TCP/IP connection on local port lport to remote host rhost on remote port rport. Use a port of 0 to have the system pick a port. Use /inet4 to force an IPv4 connection, and /inet6 to force an IPv6 connection. Plain /inet uses the system default (most likely IPv4). Usable only with the |& two-way I/O operator. /inet/udp/lport/rhost/rport /inet4/udp/lport/rhost/rport /inet6/udp/lport/rhost/rport Podobne, lecz uzywa UDP/IP zamiast TCP/IP. Funkcje numeryczne AWK ma nastepujace wbudowane funkcje arytmetyczne: atan2(y, x) Zwraca arcus tangens y/x w radianach. cos(wyraz) Zwraca cosinus z wyraz w radianach. exp(wyraz) funkcja wykladnicza. int(wyraz) Skraca do liczby calkowitej. log(wyraz) funkcja logarytmu naturalnego. rand() Return a random number N, between zero and one, such that 0 <= N < 1. sin(wyraz) Zwraca sinus z wyraz w radianach. sqrt(wyraz) Return the square root of expr. srand([wyraz]) Uzywa wyraz jako nowego ziarno dla generatora liczb losowych. Bez podanego wyraz, uzywa czasu dnia. Zwraca poprzednie ziarno generatora liczb losowych. Funkcje lancuchowe Gawk posiada nastepujace wbudowane funkcje lancuchowe; szczegolowy opis pod adresem https://www.gnu.org/software/gawk/manual/html_node/String-Functions. asort(s [, d [, how] ]) Return the number of elements in the source array s. Sort the contents of s using gawk's normal rules for comparing values, and replace the indices of the sorted values s with sequential integers starting with 1. If the optional destination array d is specified, first duplicate s into d, and then sort d, leaving the indices of the source array s unchanged. The optional string how controls the direction and the comparison mode. Valid values for how are described in https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. s and d are allowed to be the same array; this only makes sense when supplying the third argument as well. asorti(s [, d [, how] ]) Return the number of elements in the source array s. The behavior is the same as that of asort(), except that the array indices are used for sorting, not the array values. When done, the array is indexed numerically, and the values are those of the original indices. The original values are lost; thus provide a second array if you wish to preserve the original. The purpose of the optional string how is the same as for asort(). Here too, s and d are allowed to be the same array; this only makes sense when supplying the third argument as well. gensub(r, s, h [, t]) W lancuchu docelowym t wyszukuje podlancuchy odpowiadajace wyrazeniu regularnemu r. Jezeli h jest lancuchem zaczynajacym sie od g lub G, to zastepuje wszystkie znalezione dopasowania r przez s. W przeciwnym wypadku, h jest liczba wskazujaca, ktore z kolejnych dopasowan r ma zostac zastapione. Jezeli nie podano t, to zamiast niego uzywane jest $0. Wewnatrz tekstu zastepujacego s, mozna posluzyc sie sekwencja \n, gdzie n jest cyfra od 1 do 9, wskazujaca na tekst dopasowany przez n-te podwyrazenie w nawiasach. Sekwencja \0 oznacza caly dopasowany tekst, tak samo jak znak &. W przeciwienstwie do sub() i gsub(), jako wynik funkcji zwracany jest zmieniony lancuch, zas pierwotny lancuch docelowy pozostaje nie zmieniony. gsub(r, s [, t]) For each substring matching the regular expression r in the string t, substitute the string s, and return the number of substitutions. If t is not supplied, use $0. An & in the replacement text is replaced with the text that was actually matched. Use \& to get a literal &. (This must be typed as "\\&"; see https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details for a fuller discussion of the rules for ampersands and backslashes in the replacement text of sub(), gsub(), and gensub().) index(s, t) Return the index of the string t in the string s, or zero if t is not present. (This implies that character indices start at one.) length([s]) Return the length of the string s, or the length of $0 if s is not supplied. With an array argument, length() returns the number of elements in the array. match(s, r [, a]) Zwraca pozycje w s, gdzie pojawia sie wyrazenie regularne r. Jesli nie podano r, zwracane jest zero. Jesli jest jednak obecne, to dodatkowo ustawiane sa zmienne RSTART i RLENGTH. Zauwaz, ze kolejnosc argumentow jest taka sama jak dla operatora ~: str ~ re. See https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions for a description of how the array a is filled if it is provided. patsplit(s, a [, r [, seps] ]) Split the string s into the array a and the separators array seps on the regular expression r, and return the number of fields. Element values are the portions of s that matched r. The value of seps[i] is the possibly null separator that appeared after a[i]. The value of seps[0] is the possibly null leading separator. If r is omitted, FPAT is used instead. The arrays a and seps are cleared first. Splitting behaves identically to field splitting with FPAT. split(s, a [, r [, seps] ]) Split the string s into the array a and the separators array seps on the regular expression r, and return the number of fields. If r is omitted, FS is used instead. The arrays a and seps are cleared first. seps[i] is the field separator matched by r between a[i] and a[i+1]. Splitting behaves identically to field splitting. sprintf(fmt, lista-wyraz) wypisuje liste-wyraz wedlug fmt, i zwraca lancuch wyjsciowy. strtonum(str) Examine str, and return its numeric value. If str begins with a leading 0, treat it as an octal number. If str begins with a leading 0x or 0X, treat it as a hexadecimal number. Otherwise, assume it is a decimal number. sub(r, s [, t]) Podobne do gsub(), lecz podmienia tylko pierwszy odpowiadajacy podlancuch. Zwraca zero albo jeden. substr(s, i [, n]) Zwraca maksymalnie n-znakowy podlancuch lancucha s, zaczynajacy sie od pozycji i. Jesli pominieto parametr n, uzyta zostaje reszta s. tolower(str) Zwraca kopie lancucha str, w ktorej wszystkie wielkie litery zostaly zastapione malymi. Nie alfabetyczne znaki pozostaja bez zmian. toupper(str) Zwraca kopie lancucha str, w ktorej wszystkie male litery zostaly zastapione wielkimi. Nie alfabetyczne znaki pozostaja bez zmian. Gawk jest swiadomy wielobajtowosci. Oznacza to, ze index(), length(), substr() i match() dzialaja wobec znakow, nie bajtow. Funkcje czasu Gawk provides the following functions for obtaining time stamps and formatting them. Details are provided in https://www.gnu.org/software/gawk/manual/html_node/Time-Functions. mktime(datespec [, utc-flag]) Turn datespec into a time stamp of the same form as returned by systime(), and return the result. If utc-flag is present and is non-zero or non-null, the time is assumed to be in the UTC time zone; otherwise, the time is assumed to be in the local time zone. If datespec does not contain enough elements or if the resulting time is out of range, mktime() returns -1. See https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions for the details of datespec. strftime([format [, timestamp[, utc-flag]]]) Format timestamp according to the specification in format. If utc-flag is present and is non-zero or non-null, the result is in UTC, otherwise the result is in local time. The timestamp should be of the same form as returned by systime(). If timestamp is missing, the current time of day is used. If format is missing, a default format equivalent to the output of date(1) is used. The default format is available in PROCINFO["strftime"]. See the specification for the strftime() function in ISO C for the format conversions that are guaranteed to be available. systime() Zwraca biezacy czas dnia w liczbach sekund od poczatku Epoki (czyli od polnocy UTC, 1 stycznia 1970 na systemach POSIX-owych). Funkcje operujace na bitach Gawk supplies the following bit manipulation functions. They work by converting double-precision floating point values to uintmax_t integers, doing the operation, and then converting the result back to floating point. Passing negative operands to any of these functions causes a fatal error. Funkcje czasu to: and(v1, v2 [, ...]) Return the bitwise AND of the values provided in the argument list. There must be at least two. compl(val) Zwraca bitowe uzupelnienie val. lshift(val, ile) Zwraca wartosc val, przesunieta w lewo o ile bitow. or(v1, v2 [, ...]) Return the bitwise OR of the values provided in the argument list. There must be at least two. rshift(val, ile) Zwraca wartosc val, przesunieta w prawo o ile bitow. xor(v1, v2 [, ...]) Return the bitwise XOR of the values provided in the argument list. There must be at least two. Funkcje typu The following functions provide type related information about their arguments. isarray(x) Zwraca prawde, jesli x jest tablica lub falsz w innym przypadku. typeof(x) Return a string indicating the type of x. The string will be one of "array", "number", "regexp", "string", "strnum", "unassigned", or "undefined". Funkcje internacjonalizacji The following functions may be used from within your AWK program for translating strings at run-time. For full details, see https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions. bindtextdomain(katalog [, domena]) Specify the directory where gawk looks for the .gmo files, in case they will not or cannot be placed in the "standard" locations. It returns the directory where domain is "bound." Domyslna domena jest wartosc TEXTDOMAIN. Jesli katalog jest lancuchem pustym (""), to bindtextdomain() zwraca biezace wiazanie dla zadanej domeny. dcgettext(lancuch [, domena [, kategoria]]) Zwraca tlumaczenie lancucha w domenie tekstowej domena dla kategorii locale kategoria. Domyslna domena jest biezaca wartosc TEXTDOMAIN. Domyslna wartoscia kategorii jest "LC_MESSAGES". dcngettext(string1, string2, number [, domain [, category]]) Return the plural form used for number of the translation of string1 and string2 in text domain domain for locale category category. The default value for domain is the current value of TEXTDOMAIN. The default value for category is "LC_MESSAGES". Boolean Valued Functions You can create special Boolean-typed values; see the manual for how they work and why they exist. mkbool(expression) Based on the boolean value of expression return either a true value or a false value. True values have numeric value one. False values have numeric value zero. FUNKCJE UZYTKOWNIKA Funkcje w AWK sa definiowane nastepujaco: function nazwa(lista parametrow) { instrukcje } Functions execute when they are called from within expressions in either patterns or actions. Actual parameters supplied in the function call are used to instantiate the formal parameters declared in the function. Arrays are passed by reference, other variables are passed by value. Local variables are declared as extra parameters in the parameter list. The convention is to separate local variables from real parameters by extra spaces in the parameter list. For example: function f(p, q, a, b) # a i b sa lokalne { ... } /abc/ { ... ; f(1, 2) ; ... } The left parenthesis in a function call is required to immediately follow the function name, without any intervening whitespace. This restriction does not apply to the built-in functions listed above. Funkcje moga wolac siebie nawzajem i moga byc rekurencyjne. Parametry funkcji uzywane jako zmienne lokalne sa podczas wywolania funkcji inicjalizowane na lancuch pusty i liczbe zero. Chcac, by funkcja zwracala wartosc nalezy posluzyc sie skladnia: return wyraz. Wartosc zwracana przez funkcje jest niezdefiniowana jesli nie podano wartosci zwracanej lub funkcja konczy prace bez jawnej instrukcji powrotu. Jezeli uzyto --lint, to gawk ostrzega o wywolaniach niezdefiniowanych funkcji podczas analizy skladni, a nie w czasie wykonania. Wywolanie niezdefiniowanej funkcji w czasie wykonania powoduje blad krytyczny. Functions may be called indirectly. To do this, assign the name of the function to be called, as a string, to a variable. Then use the variable as if it were the name of a function, prefixed with an @ sign, like so: function myfunc() { print "myfunc called" ... } { ... the_func = "myfunc" @the_func() # call through the_func to myfunc ... } Jezeli uzyto --lint, to gawk ostrzega o wywolaniach niezdefiniowanych funkcji podczas analizy skladni, a nie w czasie wykonania. Wywolanie niezdefiniowanej funkcji w czasie wykonania powoduje blad krytyczny. DYNAMICZNE LADOWANIE NOWYCH FUNKCJI You can dynamically add new functions written in C or C++ to the running gawk interpreter with the @load statement. The full details are beyond the scope of this manual page; see https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions. SYGNALY The gawk profiler accepts two signals. SIGUSR1 causes it to dump a profile and function call stack to the profile file, which is either awkprof.out, or whatever file was named with the --profile option. It then continues to run. SIGHUP causes gawk to dump the profile and function call stack and then exit. INTERNACJONALIZACJA Stale lancuchowe sa ciagami znakow ujetymi w cudzyslowy. W srodowiskach innych niz angielskojezyczne, mozliwe jest oznakowanie lancuchow w programie AWK jako wymagajacych tlumaczenia na wlasny jezyk narodowy. Lancuchy takie sa oznaczone w programie AWK przez poczatkowy znak podkreslenia ("_"). Na przyklad, gawk 'BEGIN { print "hello, world" }' zawsze wypisuje hello, world. Ale, gawk 'BEGIN { print _"hello, world" }' might print bonjour, monde in France. See https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization for the steps involved in producing and running a localizable AWK program. ROZSZERZENIA GNU Gawk has a too-large number of extensions to POSIX awk. They are described in https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. All the extensions can be disabled by invoking gawk with the --traditional or --posix options. ZMIENNE SRODOWISKOWE The AWKPATH environment variable can be used to provide a list of directories that gawk searches when looking for files named via the -f, --file, -i and --include options, and the @include directive. If the initial search fails, the path is searched again after appending .awk to the filename. Do podania listy katalogow przegladanych przez gawk podczas poszukiwania plikow zadanych opcjami -l i --load mozna posluzyc sie zmienna srodowiskowa AWKLIBPATH. The GAWK_PERSIST_FILE environment variable, if present, specifies a file to use as the backing store for persistent memory. This is an experimental feature. See GAWK: Efektywne programowanie w AWK for the details. The GAWK_READ_TIMEOUT environment variable can be used to specify a timeout in milliseconds for reading input from a terminal, pipe or two-way communication including sockets. For connection to a remote host via socket, GAWK_SOCK_RETRIES controls the number of retries, and GAWK_MSEC_SLEEP the interval between retries. The interval is in milliseconds. On systems that do not support usleep(3), the value is rounded up to an integral number of seconds. Jesli w srodowisku istnieje zmienna POSIXLY_CORRECT to gawk zachowuje sie tak, jakby podano mu w wierszu polecen opcje --posix. Jesli podano opcje --lint, gawk wyda ostrzezenie o tym efekcie. STATUS ZAKONCZENIA If the exit statement is used with a value, then gawk exits with the numeric value given to it. Otherwise, if there were no problems during execution, gawk exits with the value of the C constant EXIT_SUCCESS. This is usually zero. If an error occurs, gawk exits with the value of the C constant EXIT_FAILURE. This is usually one. If gawk exits because of a fatal error, the exit status is 2. On non-POSIX systems, this value may be mapped to EXIT_FAILURE. INFORMACJA O WERSJI Ta strona podrecznika man opisuje gawk, w wersji numer 5.3. AUTORZY The original version of UNIX awk was designed and implemented by Alfred Aho, Peter Weinberger, and Brian Kernighan of Bell Laboratories. Ozan Yigit is the the current maintainer. Brian Kernighan occasionally dabbles in its development. Paul Rubin i Jay Fenlason, z Free Software Foundation, napisali wersje gawk, zgodna z oryginalna wersja awk, rozprowadzana w Seventh Edition UNIX. John Woods wprowadzil wiele poprawek. David Trueman, z pomoca Arnolda Robbinsa, uczynil gawk zgodnym z nowa wersja UNIX awk. Arnold Robbins jest biezacym opiekunem projektu. See GAWK: Efektywne programowanie w AWK for a full list of the contributors to gawk and its documentation. See the README file in the gawk distribution for up-to-date information about maintainers and which ports are currently supported. ZGLOSZENIA BLEDOW If you find a bug in gawk, please use the gawkbug(1) program to report it. Full instructions for reporting a bug are provided in https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Please carefully read and follow the instructions given there. This will make bug reporting and resolution much easier for everyone involved. Really. USTERKI Opcja -F niekoniecznie ma wlasciwosc przypisywania zmiennych; pozostaje tylko dla zgodnosci wstecznej. This manual page is too long; gawk has too many features. ZOBACZ TAKZE egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3). 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 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual. The GNU gettext documentation, available online at https://www.gnu.org/software/gettext. PRZYKLADY Wypisz i posortuj nazwy zgloszeniowe (login) wszystkich uzytkownikow: BEGIN { FS = ":" } { print $1 | "sort" } Zlicz linie w pliku: { nlines++ } END { print nlines } Poprzedz kazda linie jej numerem w pliku: { print FNR, $0 } Konkatenatuj i numeruj linie (wariacja tematu): { print NR, $0 } Run an external command for particular lines of data: tail -f access_log | awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }' KOPIOWANIE NINIEJSZEJ DOKUMENTACJI Copyright (C) 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 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. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Free Software Foundation 2 listopada 2023 r. GAWK(1)