Provided by: manpages-pl_4.27.0-1_all 

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 ...
WAŻNA INFORMACJA
Niniejsza strona podręcznika została udostępniona z grzeczności. Jedynym Źródłem Prawdy programu gawk
jest dokumentacja Texinfo, dostępna w wielu formatach w sieci pod adresem
https://www.gnu.org/software/gawk/manual. Może być również zainstalowana w podsystemie Info na tym
komputerze, dostępna wówczas za pośrednictwem polecenia info(1).
W przypadku różnic między dokumentacją Texinfo i niniejszą stroną podręcznika, dokumentacja Texinfo ma
pierwszeństwo.
OPIS
Gawk jest implementacją GNU języka programowania AWK. Odpowiada on definicji tego języka z POSIX 1003.1.
Wersja ta jest z kolei oparta na opisie z The AWK Programming Language, napisanym przez Aho, Kernighana i
Weinbergera. Gawk udostępnia dodatkowe funkcje z bieżącej wersji awk Briana Kernighana oraz wiele
rozszerzeń charakterystycznych dla GNU.
Wiersz poleceń składa się z opcji dla gawk, tekstu programu (jeśli nie podano go poprzez opcję -f lub
--include) i wartości, które mają być udostępnione w predefiniowanych zmiennych ARGC i ARGV.
WSTĘP
Niniejsza strona podręcznika jest bardzo zwięzła. Wszystkie szczegóły opisano w GAWK: Efektywne
programowanie w AWK i należy się z nim zapoznać aby poznać pełny opis danej funkcji. Tam, gdzie to
możliwe, zamieszczone są odnośniki do wersji online tego podręcznika.
FORMAT OPCJI
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.
Opcje specyficzne dla gawk są używane zwykle w długiej postaci. 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).
Oprócz tego, każda długa opcja ma odpowiadającą jej opcję krótką, dzięki czemu funkcjonalność danej opcji
może być używana ze skryptów wykonywalnych #!.
OPCJE
Gawk akceptuje następujące opcje. Najpierw podane są opcje standardowe, następnie opcje do rozszerzeń
gawk, ułożone alfabetycznie według krótkiej opcji.
-f program-file, --file plik-programu
Odczytuje źródło programu AWK z pliku plik-programu, zamiast odczytywać go z pierwszego argumentu
wiersza poleceń. Można użyć wielu opcji -f. Pliki odczytywane za pomocą -f są traktowane w ten
sposób, jak gdyby zaczynały się wyrażeniem @namespace "awk".
-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 reguły BEGIN programu AWK.
-b, --characters-as-bytes
Traktuje wszelkie dane wejściowe jako znaki jednobajtowe. Niniejszą opcję przesłania opcja
--posix.
-c, --traditional
Pracuje w trybie zgodności. W trybie tym, gawk zachowuje się identycznie z awk Briana Kernighana;
nie jest rozpoznawane żadne ze specyficznych dla GNU rozszerzeń.
-C, --copyright
Wypisuje krótką wersję informacji o prawach autorskich GNU na standardowe wyjście i pomyślnie
kończy działanie.
-d[plik], --dump-variables[=plik]
Wypisuje do pliku posortowaną listę zmiennych globalnych, ich typów i końcowych wartości.
Domyślnym plikiem jest awkvars.out w katalogu bieżącym.
-D[plik], --debug[=plik]
Włącza debugowanie programów AWK. Domyślnie, debuger odczytuje polecenia interaktywnie z
klawiatury (standardowego wejścia). Opcjonalny argument plik określa plik z listą poleceń do
debugera, w celu wykonania ich nieinteraktywnie.
W tym trybie wykonania, gawk ładuje kod źródłowy AWK i czeka na polecenia debugowania. Gawk może
debugować jedynie źródła 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
Używa tekstu-programu jako kodu źródłowego AWK. Każdy argument podany za pomocą opcji -e jest
traktowana tak, jak gdyby zaczynała się instrukcją @namespace "awk".
-E plik, --exec plik
Podobnie jednak do -f, opcja ta jest przetwarzana na końcu. Powinna być używana w skryptach #!,
szczególnie w przypadku aplikacji CGI, aby unikać przekazywania opcji lub kodu źródłowego (!) w
wierszu poleceń z URL-a. Opcja ta wyłącza przypisania zmiennych wiersza poleceń.
-g, --gen-pot
Przegląda i analizuje program AWK program, i tworzy na standardowym wyjściu plik formatu GNU .pot
(Portable Object Template), zawierający wpisy dla wszystkich podlegających lokalizacji łańcuchów w
programie. Sam program nie jest wykonywany.
-h, --help
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.
-i plik-do-włączenia, --include plik-do-włączenia
Ładuje bibliotekę źródłową awk. Wyszukiwanie biblioteki ma miejsce za pomocą zmiennej
środowiskowej AWKPATH. Jeśli pierwotne wyszukiwanie zawiedzie, kolejne będzie wykonane po
dołączeniu przyrostka .awk. Plik będzie załadowany jednokrotnie (tj. eliminowane są duplikaty), a
kod nie tworzy źródła głównego programu. Pliki odczytywane za pomocą --include są traktowane tak,
jak gdyby zaczynały się instrukcją @namespace "awk".
-I, --trace
Wypisuje wewnętrzne nazwy kodów bajtowych w trakcie ich wykonywania, przy działającym programie.
Ślad jest wypisywany na standardowe wyjście błędów. Każdy „kod operacji” („op code”) jest
poprzedzany na wyjściu znakiem +.
-k, --csv
Włącza specjalne przetwarzanie CSV. Zob. Wartości rozdzielone przecinkiem (CSV) poniżej, aby
dowiedzieć się więcej.
-l biblioteka, --load biblioteka
Ładuje rozszerzenie gawk z biblioteki współdzielonej. Wyszukiwanie biblioteki ma miejsce za pomocą
zmiennej środowiskowej AWKLIBPATH. Jeśli pierwotne wyszukiwanie zawiedzie, kolejne będzie wykonane
po dołączeniu domyślnego przyrostka (rozszerzenia) biblioteki współdzielonej dla danej platformy.
Oczekuje się, że procedura inicjalizacji biblioteki będzie miała nazwę dl_load().
-L [wartość], --lint[=wartość]
Zapewnia ostrzeżenia o konstrukcjach, które są wątpliwe lub nieprzenośne na inne implementacje
AWK. Lista dopuszczalnych wartości jest dostępna 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, jeśli
nie skompilowano gawk z obsługą bibliotek GMP i MPFR GNU (w takim przypadku gawk wypisze
ostrzeżenie).
UWAGA: Funkcja ta istnieje warunkowo. Główny opiekun gawk się nią już nie zajmuje, jednak robi to
jeden z członków zespołu deweloperskiego. Jeśli sytuacja ulegnie zmianie na niekorzyść, funkcja
zostanie usunięta z gawk.
-n, --non-decimal-data
Rozpoznaje wartości ósemkowe i szesnastkowe w danych wejściowych. Opcji tej należy używać ze
szczególną ostrożnością!
-N, --use-lc-numeric
Zmusza gawk do korzystania ze znaku dziesiętnego z locale (ustawień językowych), przy
przetwarzaniu danych wejściowych.
-o[plik], --pretty-print[=plik]
Wypisuje wersję programu sformatowaną za pomocą pretty-print do pliku. Domyślnym plikiem jest
awkprof.out w bieżącym katalogu. Opcja ta wymusza --no-optimize.
-O, --optimize
Włącza domyślne optymalizacje gawka wobec wewnętrznej reprezentacji programu. Opcja domyślnie
włączona.
-p[plik-prof], --profile[=plik-prof]
Rozpoczyna sesję profilowania i wysyła dane profilowania do pliku-prof. Domyślnie jest to
awkprof.out w bieżącym katalogu. Profil zawiera liczbę wykonań każdej instrukcji programu (na
lewym marginesie) oraz liczbę wywołań funkcji dla każdej funkcji użytkownika. W tym trybie gawk
działa wolniej. Opcja wymusza --no-optimize.
-P, --posix
Włącza tryb zgodności i wyłącza wiele podstawowych rozszerzeń.
-r, --re-interval
Włącza użycie wyrażeń przedziałowych (interval expressions) w dopasowaniu wyrażeń regularnych.
Wyrażenia przedziałowe są domyślnie włączone, a opcja ta pozostaje ze względu na kompatybilność
wsteczną.
-s, --no-optimize
Wyłącza domyślne optymalizacje gawka wobec wewnętrznej reprezentacji programu.
-S, --sandbox
Uruchamia gawk w trybie piaskownicy, wyłączając funkcję system(), przekierowanie wejścia za pomocą
getline, przekierowania wyjścia za pomocą print i printf oraz ładowanie rozszerzeń dynamicznych.
Wykonywanie poleceń (poprzez potoki) również jest wyłączone.
-t, --lint-old
Daje ostrzeżenia o konstrukcjach, które nieprzenośne na pierwotną wersję UNIX awk.
-V, --version
Wypisuje na standardowe wyjście informacje o danej kopii programu gawk. Jest to przydatne przy
zgłaszaniu błędów. Zgodnie z GNU Coding Standards, te opcje powodują natychmiastowe, pomyślne
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].
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ć.
Ze względu na kompatybilność z POSIX, można skorzystać z opcji -W, po której należy podać nazwę długiej
opcji.
WYWOŁANIE PROGRAMU AWK
Program AWK składa się 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 parametrów) { instrukcje }
Gawk najpierw odczytuje źródło programu z podanych plików-programu, jeśli je podano, z argumentów do
opcji --source lub z pierwszego nieopcyjnego argumentu wiersza poleceń. Opcje -f i --source można podawać
wielokrotnie w wierszu polecenia. Gawk czyta tekst programu tak, jakby wszystkie pliki-programu zostały
połączone ze sobą w całość.
Dodatkowo, do dołączania innych plików źródłowych do swojego programu, mogą służyć wiersze zaczynające
się od @include. Jest to równoważne użyciu opcji --include.
Do ładowania funkcji rozszerzających mogą służyć wiersze zaczynające się od @load. Jest to równoważne
użyciu opcji --load.
Zmienna środowiskowa AWKPATH określa ścieżkę przeszukiwania, używaną do znajdowania plików źródłowych
podanych w opcji -f i --include. 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.
Zmienna środowiskowa AWKLIBPATH określa ścieżkę przeszukiwania, używaną do znajdowania plików źródłowych
podanych w opcji --include. Jeśli zmienna ta nie istnieje, domyślną ścieżką staje się
"/usr/local/lib/gawk". (Faktyczny katalog może być różny, zależnie od tego jak skompilowano i
zainstalowano awk.)
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 regułach BEGIN (jeśli istnieją), a następnie zaczyna odczytywać każdy z plików, podanych w
tablicy ARGV (aż do ARGV[ARGC-1]). 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żdej reguły BEGIN.)
Jeśli wartość konkretnego elementu ARGV jest pusta (""), to gawk ją pomija.
Dla każdego pliku wejściowego, jeśli istnieje reguła BEGINFILE, gawk wykonuje powiązany kod przed
zawartością pliku. Podobnie, gawk wykonuje kod powiązany z regułami ENDFILE po przetworzeniu pliku.
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 regułach END.
Katalogi w wierszu polecenia
Zgodnie z normą POSIX, pliki podane w wierszu polecenia awk muszą być plikami tekstowymi. Jeśli tak nie
jest, zachowanie jest „niezdefiniowane”. Większość wersji programu akw traktuje katalog podany w wierszu
polecenia jako błąd krytyczny.
W przypadku programu gawk, katalog podany w wierszu polecenia powoduje wypisanie ostrzeżenia, lecz poza
tym jest po prostu pomijany. Jeśli poda się opcję --posix lub --traditional, to gawk potraktuje katalogi
w wierszu polecenia jako błąd krytyczny.
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.
Dodatkowo, gawk pozwala na zmienne typu wyrażenia regularnego. AWK posiada również tablice
jednowymiarowe; symulowane mogą być również tablice wielowymiarowe. Jednak gawk zapewnia prawdziwe
tablice tablic. Podczas działania programu ustawianych jest kilka predefiniowanych zmiennych; są one
opisane niżej.
Rekordy
Rekordy są zwykle rozdzielone znakami nowego wiersza. Można to zmienić przypisując wartości wbudowanej
zmiennej RS. Więcej szczegółów na stronie
https://www.gnu.org/software/gawk/manual/html_node/Records.html.
Pola
Przy odczytywaniu każdego rekordu wejściowego, gawk dzieli rekord na pola za pomocą wartości zmiennej FS
służącej jako separator pól. Dodatkowo, zmiennymi FIELDWIDTHS i FPAT można kontrolować dzielenie pól
wejściowych. Więcej szczegółów opisano, począwszy od strony
https://www.gnu.org/software/gawk/manual/html_node/Fields.html.
Do każdego pola w rekordzie wejściowym można odwołać się przez jego pozycję: $1, $2, itd. $0 jest całym
rekordem, łącznie z początkowymi i końcowymi białymi znakami.
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 powoduje również ponowne przetworzenie wartości
zmiennej $0, w której pola zostaną rozdzielone wartością OFS. Odniesienia do pól numerowanych wartościami
ujemnymi powoduje błąd krytyczny. Zmniejszenie licznika NF powoduje utratę wartości przez pola znajdujące
się poza nową wartością licznika, a wartość zmiennej $0 zostanie przeliczona, z polami rozdzielonymi
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.
Wartości rozdzielone przecinkiem (CSV)
Przy wywołaniu z opcją -k lub --csv, gawk nie korzysta ze zwykłego rozstrzygania o rekordach oraz
dzieleniu pól opisanego powyżej. Zamiast tego, rekordy są rozdzielane niecytowanymi znakami nowego
wiersza, a pola są rozdzielane przecinkiem. Pola zawierające przecinki lub znaki nowego wiersza należy
ująć w cudzysłów („"”), a cudzysłowy wewnątrz pola – podwoić. Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html.
Wbudowane zmienne
Poniżej wypisano wbudowano zmienne programu gawk. Lista ta jest celowo zwięzła. Więcej szczegółów opisano
na stronie https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.
ARGC Liczba argumentów wiersza poleceń.
ARGIND Indeks w tablicy ARGV bieżąco przetwarzanego pliku.
ARGV Tablica argumentów wiersza poleceń. Tablica ta jest indeksowana od 0 do ARGC - 1.
BINMODE Na systemach nie-POSIX-owych, określa użycie trybu „binarnego” do wszystkich operacji
wejścia/wyjścia plików. Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html.
CONVFMT Format konwersji dla liczb, domyślnie "%.6g".
ENVIRON Tablica zawierająca wartości bieżącego środowiska. Tablica ta jest indeksowana zmiennymi
środowiskowymi, każdy element tablicy jest wartością danej zmiennej.
ERRNO Jeśli pojawi się błąd systemowy podczas przekierowywania dla getline, podczas odczytu dla
getline lub podczas close(), to ERRNO jest ustawiana na łańcuch opisujący błąd. Podlega on
tłumaczeniu przy ustawieniach locale innych niż angielskie.
FIELDWIDTHS Jest rozdzieloną białymi znakami 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). Każdą szerokość pola można opcjonalnie poprzedzić wartościami rozdzielonymi
dwukropkiem, określającymi liczbę znaków do pominięcia, przed rozpoczęciem pola.
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 reguły BEGIN
(chyba że zostanie nadana przez getline).
FNR Liczba rekordów wejściowych w bieżącym pliku wejściowym.
FPAT Wyrażenie regularne opisujące zawartość pól w rekordzie. Jeśli zmienna ta jest ustawiona, to
gawk przetwarza wejście na pola pasujące do wyrażenia regularnego, zamiast używać wartości FS
jako separatora pól.
FS Separator pól wejściowych, domyślnie spacja. Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html.
FUNCTAB Tablica, której indeksy i powiązane wartości są nazwami wszystkich zdefiniowanych przez
użytkownika lub będących rozszerzeniami funkcjami w programie. UWAGA: w tablicy FUNCTAB nie
można używać instrukcji delete.
IGNORECASE Kontroluje wrażliwość na wielkość znaków wszystkich wyrażeń regularnych i operacji na
łańcuchach tekstowych. Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html.
LINT Zapewnia dynamiczną kontrolę opcji --lint z wnętrza programu AWK.
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.
PREC Robocza precyzja liczb zmiennoprzecinkowych o dowolnej precyzji, domyślnie 53.
PROCINFO Elementy tej tablicy zapewniają dostęp do informacji o działającym programie AWK. Więcej
szczegółów pod adresem https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset.
ROUNDMODE Tryb zaokrąglania w przypadku arytmetyki liczb o dowolnej precyzji, domyślnie "N" (tryb
roundTiesToEven IEEE-754). Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode.
RS Separator rekordów wejściowych, domyślnie nowy wiersz.
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 Łańcuch, używany do rozdzielania wielokrotnych indeksów w elementach tablicowych, domyślnie
jest to "\034".
SYMTAB Tablica, której indeksy są nazwami wszystkich zdefiniowanych zmiennych globalnych i tablic w
programie. W tablicy SYMTAB nie można używać instrukcji delete, ani przypisywać elementów z
indeksami, które nie są nazwą zmiennych.
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 indeks [łańcuchowy] o oczekiwanej wartości, można użyć
specjalnego operatora in:
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.]. Jednak konstrukcja (i, j) in
array działa tylko w testach, nie w pętlach for.
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.
gawk obsługuje prawdziwe tablice wielowymiarowe. Nie wymaga, aby były one „prostokątne”, jak w C lub C++.
Więcej szczegółów pod adresem https://www.gnu.org/software/gawk/manual/html_node/Arrays.
Przestrzenie nazw
Gawk obsługuje uproszczoną funkcjonalność przestrzeni nazw, aby pomóc obejść ograniczenia, wynikające z
tego, że wszystkie zmienne w AWK są globalne.
Nazwa kwalifikowalna składa się z dwóch prostych identyfikatorów połączonych podwójnym dwukropkiem (::).
Lewa strona identyfikatora reprezentuje przestrzeń nazw, a prawa — jej zmienną. Wszystkie proste
(niekwalifikowalne) nazwy są uważane za znajdujące się w „bieżącej” przestrzeni nazw; domyślną
przestrzenią nazw jest awk. Jednak proste identyfikatory składające się jedynie z wielkich liter są
zawsze przypisywane przestrzeni nazw awk, nawet jeśli bieżąca przestrzeń nazw jest inna.
Można zmienić bieżącą przestrzeń nazw za pomocą dyrektywy @namespace "nazwa".
Standardowe, predefiniowane nazwy funkcji wbudowanych nie mogą być użyte jako nazwy przestrzeni nazw.
Nazwy dodatkowych funkcji zapewnianych przez gawk mogą być używane jako przestrzenie nazw lub jako proste
identyfikatory w innych przestrzeniach nazw. Więcej szczegółów opisano pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.
Typy zmiennych i konwersje
Zmienne oraz pola mogą być liczbami (zmiennoprzecinkowymi), łańcuchami lub jednym i drugim naraz. Mogą
być też wyrażeniami regularnymi. 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, należy do niej dodać zero; aby wymusić traktowanie jej jako
łańcucha, należy dokleić do niej łańcuch zerowy.
Niezainicjowane zmienne mają wartość numeryczną zero i łańcuchową "" (zero lub pusty łańcuch).
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).
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.
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() lub patsplit(), 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.
Stałe ósemkowe i szesnastkowe
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 (jak "wartość"). Wewnątrz łańcuchów
rozpoznawane są pewne sekwencje specjalne, jak w C. Więcej szczegółów pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.
Stałe wyrażeń regularnych
Stała wyrażenia regularnego jest sekwencją znaków ujętych pomiędzy ukośniki (jak /wartość/).
Sekwencji specjalnych opisanych w podręczniku można też używać wewnątrz stałych wyrażeń regularnych (np.,
/[ \t\f\n\r\v]/ dopasowuje białe znaki).
Gawk zapewnia stałe wyrażeń regularnych ze ścisłą kontrolą typów. Są one zapisywane z początkowym
symbolem @ (jak: @/wartość/). Takie zmienne mogą być przypisane do wartości skalarnych (zmiennych,
elementów tablicy) i przekazywane do funkcji zdefiniowanych przez użytkownika. Przypisane w ten sposób
zmienne mają zwykły typ wyrażenia regularnego.
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 wiersza. Do oddzielania instrukcji można
używać pustych wierszy. Zwykle instrukcja kończy się wraz z nowym wierszem, jednak nie jest to regułą w
przypadku wierszy kończących się na przecinek, {, ?, :, && lub ||. Dla wierszy kończących się na do lub
else również wystąpi automatyczna kontynuacja instrukcji w następnym wierszu. W innych przypadkach,
wiersz może być kontynuowany przez zakończenie go znakiem „\”; w takim wypadku znak nowego wiersza jest
ignorowany. Jednak „\” po znaku # nie jest traktowane w specjalny sposób.
Wiele instrukcji można też zgrupować w jednym wierszu, 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
BEGINFILE
ENDFILE
/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 pojedynczej regule
BEGIN. Są one wykonywane przed rozpoczęciem odczytywania danych wejściowych. Podobnie, wszelkie reguły
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ę.
BEGINFILE i ENDFILE są dodatkowymi specjalnymi wzorcami, których akcje są wykonywane, odpowiednio, przed
odczytaniem pierwszego rekordu każdego pliku wejściowego z wiersza polecenia i po odczytaniu ostatniego
rekordu każdego pliku. Wewnątrz reguły BEGINFILE wartość ERRNO jest łańcuchem pustym, jeśli plik otwarł
się pomyślnie. W przeciwnym przypadku występuje jakiś problem z plikiem i kod powinien skorzystać z
nextfile, aby go pominąć. Jeśli tego nie uczyni, gawk zgłosi swój standardowy błąd krytyczny dla plików,
których nie da się otworzyć.
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ą w gruncie rzeczy tymi samymi
wyrażeniami, które można spotkać w egrep(1). Więcej informacji o wyrażeniach regularnych znajduje się na
stronie https://www.gnu.org/software/gawk/manual/html_node/Regexp.html.
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.
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.
+ - ! Jednoargumentowy plus, minus i logiczna negacja.
* / % Mnożenie, dzielenie i modulo (reszta dzielenia).
+ - Dodawanie i odejmowanie.
odstęp Konkatenacja (złączenie) łańcuchów.
| |& Przekierowanie wejścia/wyjścia potokiem dla getline, print i printf.
< > <= >= == !=
Regularne operatory relacyjne.
~ !~ Dopasowanie wyrażenia regularnego, wyrażenie przeciwne.
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 }
switch (wyrażenie) { case wartość|wyraż-regul : instrukcja ... [ default: instrukcja ]
}
Instrukcje I/O
Instrukcje I/O są następujące:
close(plik [, jak]) Zamyka otwarty 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, RT.
getline <plik Ustawia $0 z następnego rekordu pliku; ustawia NF, RT.
getline var Ustawia var z następnego rekordu wejściowego; ustawia NR, FNR, RT.
getline var <plik Ustawia var z następnego rekordu pliku; ustawia RT.
polecenie | getline [var]
Uruchamia przesyłanie potokiem wyjścia polecenia do $0 albo var, jak wyżej oraz RT.
polecenie |& getline [var]
Uruchamia polecenia jako proces współbieżny, wysyłając potokiem jego wyjście do $0
albo do var, jak wyżej oraz RT (polecenie może być także gniazdem; zob. poniższy
podrozdział Specjalne Nazwy Plików).
fflush([plik]) Opróżnia bufory związane z otwartym plikiem wynikowym lub potokiem plik. Jeśli
pominięto plik lub jest on łańcuchem pustym, to opróżniane są wszystkie wynikowe
pliki i potoki.
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. Po osiągnięciu końca danych wejściowych, wykonywane są reguły 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 resetowane na 1 i przetwarzanie rozpoczyna się od
pierwszego wzorca programu AWK. Po osiągnięciu końca danych wejściowych, wykonywane
są reguły ENDFILE i END.
print Wypisuje bieżący rekord. Rekord wyjściowy zakończony jest wartością ORS.
print lista-wyrażeń Wypisuje wyrażenia. Każde wyrażenie jest oddzielone wartością OFS. Wyjściowy
rekord jest kończony wartością ORS.
print lista-wyrażeń >plik
Wypisuje wyrażenia do pliku. Każde wyrażenie jest rozdzielone wartością OFS.
Rekord wyjściowy jest zakończony wartością 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). Pełne informacje o statusie
zakończenia są dostępne pod adresem
https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions.
Dozwolone są też dodatkowe przekierowania wejścia i wyjścia dla print i printf.
print ... >> plik
Dokleja wyjście do pliku.
print ... | polecenie
Zapisuje do potoku.
print ... |& polecenie
Wysyła dane do procesu współbieżnego lub gniazda (zob. też podrozdział Specjalne nazwy plików).
Funkcja getline zwraca 1 dla powodzenia, zero dla końca pliku oraz -1 jeśli wystąpił błąd. Jeśli wartość
errno(3) wskazuje, że operacja wejścia/wyjścia może być ponowiona i ustawione jest PROCINFO["input",
"RETRY"], to zamiast -1 zwracane jest -2 i można próbować wywoływać getline ponownie. W przypadku
wystąpienia błędu, ERRNO ustawiane jest na łańcuch opisujący problem.
UWAGA: Niepowodzenie otwarcia dwukierunkowego gniazda powoduje zwrócenie niekrytycznego błędu do funkcji
wywołującej. Używając potoku, procesu współbieżnego lub gniazda do getline albo z print lub printf
wewnątrz pętli konieczne jest użycie close() do utworzenia nowych instancji tego polecenia lub gniazda.
AWK nie zamyka automatycznie potoków, gniazd ani procesów współbieżnych gdy zwrócą one EOF (koniec
pliku).
Wersje AWK instrukcji printf oraz funkcji sprintf() są podobne do tych z C. Więcej informacji pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Printf.html.
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:
- Standardowe wejście.
/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.
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
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport
Pliki dla połączenia TCP/IP na lokalnym porcie lport do zdalnej stacji rhost na zdalnym porcie
rport. Port 0 spowoduje, że to system znajdzie port. /inet4 wymusi połączenie IPv4, a /inet6
wymusi połączenie IPv6. Zwykłe /inet użyje domyślnej wartości systemowej (zapewne IPv4). Używalne
tylko z dwukierunkowym operatorem wejścia/wyjścia |&.
/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport
Podobne, lecz używa UDP/IP zamiast TCP/IP.
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ą N, pomiędzy zerem a jedynką tak, że 0 ≤ N < 1.
sin(wyraż) Zwraca sinus z wyraż w radianach.
sqrt(wyraż) Zwraca pierwiastek kwadratowy wyraż.
srand([wyraż])
Używa wyraż jako nowego ziarno dla generatora liczb losowych. Bez podanego wyraż, używa
czasu dnia. Zwraca poprzednie ziarno generatora liczb losowych.
Funkcje łańcuchowe
Gawk posiada następujące wbudowane funkcje łańcuchowe; szczegółowy opis pod adresem
https://www.gnu.org/software/gawk/manual/html_node/String-Functions.
asort(s [, d [, jak] ]) Zwraca liczbę elementów w źródłowej tablicy s. Sortuje zawartość s z
zastosowaniem zwykłych reguł gawk do porównywania wartości, zastępując indeksy
posortowanych wartości 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, zaś indeksy tablicy źródłowej s pozostają
niezmienione. Opcjonalny łańcuch jak reguluje kierunek i tryb porównania.
Prawidłowe wartości jak opisano pod adresem
https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions.
s i d mogą występować w tej samej tablicy; ma to sens tylko przy podaniu
trzeciego argumentu.
asorti(s [, d [, jak] ])
Zwraca liczbę elementów w źródłowej tablicy s. Zachowanie jest takie jak w
przypadku asort() z tym wyjątkiem, że do sortowania służą indeksy tablicy, a nie
jej wartości. Rezultatem jest tablica indeksowana numerycznie, której wartościami
są pierwotne indeksy. Pierwotne wartości są tracone; z tego powodu należy
zapewnić drugą tablicę, jeśli chce się zachować pierwotną. Zastosowanie
opcjonalnego łańcucha jak jest takie samo jak w przypadku asort(). Również tutaj
s i d mogą być w tej samej tablicy; to także ma sens tylko przy podaniu trzeciego
argumentu.
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. Aby
otrzymać literalny znak & należy użyć \& (konieczne jest wpisanie tego jako
"\\&"; zob.
https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details
aby zapoznać się z pełniejszym omówieniem reguł znaków & oraz odwrotnych
ukośników w tekście zastępującym dla funkcji sub(), gsub() i gensub()).
index(s, t) Zwraca indeks łańcucha t w łańcuchu s lub zero, gdy t jest nieobecne (co
implikuje, że indeksy znaków zaczynają się od jedynki).
length([s]) Zwraca długość łańcucha s lub długość $0, jeśli nie podano s. Przy argumencie
będącym tablicą, length() zwraca liczbę elementów w tablicy.
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. Pod adresem
https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions
dostępny jest opis, w jaki sposób następuje zapełnianie tablicy a, jeśli się ją
poda.
patsplit(s, a [, r [, seps] ])
Dzieli łańcuch s na tablicę a i tablicę separatorów seps w miejscach
rozdzielonych wyrażeniem regularnym r, i zwraca liczbę pól. Wartościami elementów
są fragmenty s, które zostały dopasowane przez r. Wartością seps[i] jest
separator (być może null), który pojawił się po a[i]. Wartością seps[0] jest
wiodący separator (być może null). Jeśli pominięto r, zamiast niego używane jest
FPAT. Na początku, tablice a i seps są czyszczone. Podział odbywa się
identycznie podział pól przy FPAT.
split(s, a [, r [, seps] ])
Dzieli łańcuch s na tablicę a i tablicę separatorów seps, 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, czyszczone są tablice a i seps.
seps[i] jest separatorem pola dopasowanego przez r pomiędzy a[i] i a[i+1].
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 traktuje go jako liczbę ósemkową. Jeśli str zaczyna się od początkowego 0x
lub 0X, to traktuje go jako liczbę szesnastkową. W innym przypadku przyjmuje, że
jest to liczba dziesiętna.
sub(r, s [, t]) Podobne do gsub(), lecz podmienia tylko pierwszy odpowiadający podłańcuch. Zwraca
zero albo jeden.
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.
Gawk jest świadomy wielobajtowości. Oznacza to, że index(), length(), substr() i match() działają wobec
znaków, nie bajtów.
Funkcje czasu
Gawk zapewnia następujące funkcje do pozyskiwania znaczników czasowych i formatowania ich. Szczegółowy
opis pod adresem https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
mktime(określenie-daty [, znacznik-utc])
Przekształca określenie-daty na znacznik czasu w tej samej postaci, jaka jest zwracana przez
systime() i zwraca wynik. Jeśli obecny jest znacznik-utc i jest on niezerowy i niebędący null,
przyjmuje się, że czas jest w strefie czasu uniwersalnego (UTC), w innym przypadku przyjmuje
się, że jest to czas lokalny. Jeśli określenie-daty nie zawiera wymaganych elementów lub
zwrócony czas jest poza zakresem, mktime() zwraca -1. Szczegóły określenia-daty opisano pod
adresem https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions.
strftime([format [, znacznik-czasu[, znacznik-utc]]])
formatuje znacznik-czasu według wskazówek zawartych w zmiennej format. Jeśli obecny jest
znacznik-utc i jest on niezerowy i niebędący null, przyjmuje się, że czas jest w strefie czasu
uniwersalnego (UTC), w innym przypadku przyjmuje się, że jest to czas lokalny. Znacznik-czasu
powinien być taki sam, jak ten, zwracany przez systime(). Jeśli brakuje parametru
znacznik-czasu, 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). Domyślny format jest dostępny w
PROCINFO["strftime"]. Zobacz specyfikację funkcji strftime () w ISO C, aby zobaczyć jakie
konwersje formatów są na pewno dostępne.
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
Gawk zapewnia poniższe funkcje operujące na bitach. Działają przez konwersję wartości
zmiennoprzecinkowych podwójnej precyzji na całkowite uintmax_t, wykonanie operacji, a następnie konwersję
wyniku z powrotem na zmiennoprzecinkowy. Przekazanie ujemnych argumentów do którejś z tych funkcji
spowoduje błąd krytyczny.
Funkcje:
and(v1, v2 [, ...]) Zwraca bitową koniunkcję AND wartości podanych w liście argumentów. Musi być ich co
najmniej dwa.
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 w liście argumentów. Musi być ich co
najmniej dwa.
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 w liście argumentów.
Musi być ich co najmniej dwa.
Funkcje typu
Następujące funkcje zapewniają informacje związane z typem ich argumentów.
isarray(x) Zwraca prawdę, jeśli x jest tablicą lub fałsz w innym przypadku.
typeof(x) Zwraca łańcuch wskazujący typ x. Łańcuch przyjmie jedną z wartości: "array", "number",
"regexp", "string", "strnum", "unassigned", or "undefined".
Funkcje internacjonalizacji
Można używać wewnątrz programów AWK funkcji do tłumaczenia łańcuchów podczas wykonania programu.
Szczegóły opisano pod adresem
https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
bindtextdomain(katalog [, domena])
Określa katalog, w którym gawk szuka plików .gmo, w przypadku gdy nie będą lub nie mogą być
umieszczone w „standardowych” miejscach. 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".
dcngettext(łańcuch1, łańcuch2, liczba [, domena [, kategoria]])
Zwraca formę mnogą używaną dla tłumaczenia liczby łańcucha1 i łańcucha2 w domenie tekstowej domena
dla kategorii locale kategoria. Domyślną domeną jest bieżąca wartość TEXTDOMAIN. Domyślną
wartością kategorii jest "LC_MESSAGES".
Funkcje z wartościami logicznymi
Można tworzyć specjalne wartości typu logicznego; więcej informacji o działaniu i przyczynie ich
istnienia opisano w podręczniku.
mkbool(wyrażenie)
W zależności od wartości logicznej wyrażenia, zwraca wartość prawdy lub wartość fałszu. Wartość
prawdy ma wartość numeryczną jeden. Wartość fałszu ma wartość numeryczną zero.
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ść.
Zmienne lokalne są deklarowane jako dodatkowe parametry w liście parametrów. Konwencja polega na
separowaniu zmiennych lokalnych od parametrów dodatkowymi spacjami w liście parametrów. Na przykład:
function f(p, q, a, b) # a i b są lokalne { ... }
/abc/ { ... ; f(1, 2) ; ... }
Lewy nawias w wywołaniu funkcji musi występować bezpośrednio za nazwą funkcji, bez wtrąconego odstępu.
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.
Funkcje można wywoływać niebezpośrednio. W tym celu należy przypisać nazwę funkcji, która ma być
wywołana, jako łańcuch, do zmiennej. Następnie zmienną można podać jakby była nazwą funkcji, poprzedzając
ją znakiem @, jak w przykładzie:
function mojafunkcja() { print "wywołano mojafunkcja" ... }
{ ... ta_funkcja = "mojafunkcja" @ta_funkcja() # wywołanie mojafunkcja poprzez ta_funkcja ... }
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.
DYNAMICZNE ŁADOWANIE NOWYCH FUNKCJI
Można dynamicznie dodawać nowe funkcje napisane w C lub C++ do pracującego interpretera gawk instrukcją
@load. Dokładne szczegóły wykraczają poza zakres tej strony podręcznika; zob.
https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.
SYGNAŁY
Profiler gawk przyjmuje dwa sygnały. SIGUSR1 powoduje, że zrzuca on profil i stos wywołań funkcji do
pliku profilu, którym jest albo awkprof.out, albo plik podany z opcją --profile. Następnie kontynuuje
działanie. SIGHUP powoduje, że gawk zrzuca profil i stos wywołań funkcji a następnie kończy pracę.
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łasny 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" }'
może wypisać bonjour, monde we Francji. Więcej informacji na temat kroków potrzebnych do tworzenia i
działania, dającego się tłumaczyć programu K, opisano pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization.
ROZSZERZENIA GNU
Gawk ma zbyt wiele rozszerzeń do POSIX awk. Są one opisane pod adresem
https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. Wszystkie rozszerzenia można
wyłączyć, wywołując gawk z opcją --traditional lub --posix.
ZMIENNE ŚRODOWISKOWE
Do podania listy katalogów przeglądanych przez gawk podczas poszukiwania plików zadanych opcjami -f,
--file, -i i --include oraz dyrektywą @include można posłużyć się zmienną środowiskową AWKPATH. Jeśli
pierwotne wyszukiwanie nie powiedzie się, ścieżka jest przeszukiwana ponownie, z dołączonym do nazwy
pliku .awk.
Do podania listy katalogów przeglądanych przez gawk podczas poszukiwania plików zadanych opcjami -l i
--load można posłużyć się zmienną środowiskową AWKLIBPATH.
Zmienna środowiskowa GAWK_PERSIST_FILE, jeśli obecna, wskazuje na plik, który służy jako magazyn pamięci
trwałej. Więcej szczegółów w GAWK: Efektywne programowanie w AWK.
Zmienna środowiskowa GAWK_READ_TIMEOUT może posłużyć do określenia czasu przeterminowania, w
milisekundach, na oczekiwanie na wejście na terminalu, w potoku lub przez komunikację dwustronną, w tym
gniazda.
W przypadku połączeń do stacji zdalnej za pomocą gniazda, GAWK_SOCK_RETRIES reguluje liczbę ponownych
prób, a GAWK_MSEC_SLEEP interwał między nimi. Interwał określa się w milisekundach. W systemach
nieobsługujących usleep(3), wartość jest zaokrąglana w górę, do pełnych sekund.
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.
STATUS ZAKOŃCZENIA
Jeśli instrukcja exit zostanie użyta z wartością, to gawk wychodzi z podaną w niej wartością numeryczną.
W pozostałych przypadkach, jeśli przy wykonaniu nie napotkano na problemy, gawk wychodzi z wartością
stałej C EXIT_SUCCESS. Zwykle wynosi zero.
Jeśli wystąpi błąd, gawk wychodzi z wartością stałej C EXIT_FAILURE. Zwykle wynosi jeden.
Jeśli gawk wyjdzie z powodu błędu krytycznego, status zakończenia wynosi 2. W systemach innych niż POSIX,
wartość tę można przypisać do EXIT_FAILURE.
INFORMACJA O WERSJI
Ta strona podręcznika man opisuje gawk, w wersji numer 5.3.
AUTORZY
Oryginalna wersja UNIX awk była opracowana i zaimplementowana przez Alfreda Aho, Petera Weinbergera i
Briana Kernighana z Bell Laboratories. Aktualnym opiekunem jest Ozan Yigit. Brian Kernighan wciąż
okazjonalnie rozwija program.
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.
Pełna lista twórców gawk jest dostępna w dokumentacji programu oraz w podręczniku GAWK: Efektywne
programowanie w AWK.
Plik README w dystrybucji gawk zawiera aktualne informacje o opiekunach oraz obecnie obsługiwanych
portach.
ZGŁOSZENIA BŁĘDÓW I ZAPYTANIA
Po napotkaniu błędu w gawk, proszę skorzystać z programu gawkbug(1), aby go zgłosić.
Pełna instrukcja zgłaszania błędów jest dostępna pod adresem
https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Prosimy o uważne przeczytanie i stosowanie
się do niej. Czyni to zgłaszanie i poprawianie błędów znacznie łatwiejsze dla wszystkich zaangażowany.
Naprawdę!
Z drugiej strony, jeśli ma się pytanie o to, jak wykonać dane zadanie używając awk lub gawk, można wysłać
wiadomość na adres help-gawk@gnu.org z prośbą o pomoc.
USTERKI
Opcja -F niekoniecznie ma właściwość przypisywania zmiennych; pozostaje tylko dla zgodności wstecznej.
Niniejszy podręcznik systemowy jest zbyt obszerny, gawk ma zbyt wiele funkcji.
ZOBACZ TAKŻE
egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).
The AWK Programming Language, wydanie drugie, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger,
Addison-Wesley, 2023. ISBN 9-780138-269722.
GAWK: Efektywne programowanie w AWK, Wydanie 5.3, dostarczane ze źródłami gawk source. Bieżąca wersja
tego dokumentu jest dostępna pod adresem https://www.gnu.org/software/gawk/manual.
Dokumentacja GNU gettext, dostępna pod adresem https://www.gnu.org/software/gettext.
PRZYKŁADY
Wypisz i posortuj nazwy zgłoszeniowe (login) wszystkich użytkowników:
BEGIN { FS = ":" } { print $1 | "sort" }
Zlicz wiersze w pliku:
{ nlines++ } END { print nlines }
Poprzedź każdy wiersz jego numerem w pliku:
{ print FNR, $0 }
Łącz i numeruj wiersze (wariacja tematu):
{ print NR, $0 }
Uruchom zewnętrzne polecenie dla określonych wierszy danych:
tail -f access_log | awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
KOPIOWANIE NINIEJSZEJ DOKUMENTACJI
Copyright © 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, 2024,
2025 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.
TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl> i Michał Kułach
<michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Free Software Foundation 23 marca 2025 r. GAWK(1)