2 .TH MAWK 1 "22 grudnia 1994" "wersja 1.2" "POLECENIA U¯YTKOWNIKA"
6 mawk \- jêzyk wyszukiwania wzorców i przetwarzania tekstu
15 .IR zmn\fB=\fPwarto¶æ ]
17 .RB [ \-\- "] 'tekst programu'"
26 .IR zmn\fB=\fPwarto¶æ ]
34 jest interpreterem jêzyka programowania AWK. Jêzyk AWK jest u¿yteczny
35 w dzia³aniach na plikach danych, wyszukiwaniu i przetwarzaniu tekstu oraz
36 tworzeniu prototypów i eksperymentowaniu z algorytmami.
38 implementuje jêzyk AWK, jak go zdefiniowali Aho, Kernighan i Weinberger
40 .IR "The AWK Programming Language" ,
41 Addison-Wesley Publishing, 1988 (dalej wzmiankowanej jako ksi±¿ka AWK).
43 jest zgodny z definicj± jêzyka AWK ze standardu Posix 1003.2
44 (propozycja 11.3), zawieraj±c± nowe cechy nie opisane w ksi±¿ce AWK.
47 zawiera nieco rozszerzeñ.
49 Program AWK jest sekwencj± par \fIwzorzec {akcja}\fP i definicji funkcji.
50 Krótkie programy wprowadzane s± w wierszu poleceñ, zwykle ujête w ' ', by
51 unikn±æ interpretacji ich sk³adowych przez pow³okê.
52 D³u¿sze programy mog± byæ czytane z pliku przy pomocy opcji \fB-f\fP.
53 dane wej¶ciowe odczytywane s± z listy plików z wiersza poleceñ lub
54 ze standardowego wej¶cia, gdy lista ta jest pusta.
55 Wej¶cie rozbijane jest na rekordy okre¶lone wed³ug zmiennej opisuj±cej
56 separator rekordów, \fBRS\fP (record separator). Pocz±tkowo
58 a rekordy s± to¿same z wierszami. Ka¿dy z rekordów porównywany jest z ka¿dym
61 a je¶li pasuje, wykonywany jest tekst programu dla
64 .TP \w'\-\fBW'u+\w'\fRsprintf=\fInum\fR'u+2n
66 ustawia separator pól, \fBFS\fP, na
70 Tekst programu jest czytany z \fIpliku\fP zamiast z wiersza poleceñ.
71 Dopuszcza siê wielokrotne u¿ycie opcji
74 \fB\-v \fIzmn\fB=\fPwarto¶æ
81 wskazuje jednoznaczny koniec opcji.
83 Powy¿sze opcje bêd± dostêpne w ka¿dej zgodnej z Posix implementacji AWK.
84 Opcje specyficzne dla danej implementacji poprzedzane s± przez
87 udostêpnia sze¶æ takich rozszerzeñ:
88 .TP \w'\-\fBW'u+\w'\fRsprintf=\fInum\fR'u+2n
91 wypisuje sw± wersjê i prawa autorskie na stdout (standardowym wyj¶ciu), za¶
92 wkompilowane ograniczenia na stderr (standardowym wyj¶ciu b³êdów).
93 Koñczy pracê z kodem 0.
96 wypisuje na stdout asembleropodobny listing wewnêtrznej
97 reprezentacji programu i koñczy pracê z kodem 0 (przy pomy¶lnej kompilacji).
100 ustawia niebuforowane zapisy na stdout i buforowane wierszami odczyty
101 z stdin (standardowego wej¶cia). Rekordy z stdin s± wierszami niezale¿nie
106 Tekst programu czytany jest z
108 i jest to ostatnia opcja. Przydatne na systemach obs³uguj±cych konwencjê
111 dla skryptów wykonywalnych.
113 .B \-W sprintf=\fInum
114 ustawia rozmiar bufora wewnêtrznego sprintf
117 bajtów. Czêstsze ni¿ sporadyczne stosowanie tej opcji wskazuje, ¿e
119 powinien zostaæ zrekompilowany.
124 by nie uwa¿a³ '\en' za odstêp.
126 Rozpoznawane s± krótkie postacie
128 za¶ w niektórych systemach \fB\-We\fP jest obowi±zkowe dla unikniêcia
129 ograniczeñ d³ugo¶ci wiersza poleceñ.
131 .SS "1. Struktura programu"
132 Program w jêzyku AWK jest sk³ada siê z sekwencji par
134 i definicji funkcji u¿ytkownika.
142 .IB wyra¿enie ", " wyra¿enie
146 Mo¿na pomin±c jeden z elementów z pary \fIwzorzec {akcja}\fP, ale nie oba.
149 to jest ni± domniemane \fB{ print }\fP.
152 to jest on niejawnie dopasowany.
159 Instrukcje zakoñczone s± znakami nowej linii, ¶rednikami
160 lub oboma tymi znakami.
161 Grupy instrukcji, jak akcje czy cia³a pêtli, ³±czone s± w bloki
162 za po¶rednictwem \fB{ ... }\fP, jak w C.
163 Ostatnia instrukcja w bloku nie wymaga znaku koñcz±cego.
164 Puste wiersza nie maj± znaczenia; pusta instrukcja zakoñczona jest
165 ¶rednikiem. D³ugie instrukcje mo¿na kontynuowaæ przy pomocy odwrotnego
167 Instrukcjê mo¿na podzieliæ miêdzy wiersze bez u¿ycia odwrotnego uko¶nika
168 po przecinku, nawiasie otwieraj±cym, &&, ||,
171 nawiasie zamykaj±cym instrukcji
176 oraz nawiasie zamykaj±cym definicji funkcji.
177 Komentarze zaczynaj± siê od \fB#\fP i rozci±gaj± siê do a¿ koñca wiersza,
178 choæ go nie obejmuj±.
180 Poni¿sze instrukcje steruj± przep³ywem programu wewn±trz bloków.
211 ( \fIzmn \fBin \fItablica\fR )
219 .SS "2. Typy danych, konwersja i porównywanie"
220 Istniej± dwa podstawowe typy danych, numeryczny i ³añcuch znakowy.
221 Sta³e liczbowe mog± byæ ca³kowite, jak \-2, dziesiêtne jak 1.08,
222 lub podane w notacji naukowej jak \-1.1e4 czy .28E\-3. Wszystkie liczby
223 s± reprezentowane wewnêtrznie w arytmetyce zmiennoprzecinkowej. Wszystkie
224 obliczenia równie¿ s± zmiennoprzecinkowe.
225 Tak wiêc, na przyk³ad, wyra¿enie
227 jest prawd±. Prawda reprezentowana jest jako 1.0.
229 Sta³e ³añcuchowe ujête s± w cudzys³owy.
232 "To jest ³añcuch ze znakiem nowej linii na koñcu.\en"
234 £añcuchy znakowe mog± byæ kontynuowane w kolejnych wierszach dziêki
235 poprzedzeniu znaku nowej linii odwrotnym uko¶nikiem (\e).
236 Rozpoznawane s± nastêpuj±ce sekwencje specjalne:
242 \eb backspace, ascii 8
243 \et tabulacja, ascii 9
244 \en znak nowej linii, newline , ascii 10
245 \ev tabulacja pionowa, ascii 11
246 \ef wysuw strony, formfeed, ascii 12
247 \er powrót karetki, carriage return, ascii 13
248 \eddd 1, 2 lub 3 cyfry ósemkowe dla ascii ddd
249 \exhh 1 lub 2 cyfry szesnastkowe dla ascii hh
252 Je¿eli odwrotnym uko¶nikiem zostanie poprzedzony inny znak, np. \ec, wynikiem
253 bêdzie sekwencja ¼ród³owa: \ec, tzn.
255 zignoruje specjalne w³a¶ciwo¶ci odwrotnego uko¶nika.
257 Naprawdê istniej± trzy podstawowe typy danych; trzecim jest
258 .IR "liczba i ³añcuch" ,
259 posiadaj±cy równocze¶nie warto¶æ liczbow± i warto¶æ ³añcuchow±.
260 Zmienne definiowane przez u¿ytkownika pojawiaj± siê przy pierwszym
261 ich u¿yciu i s± inicjowane na
263 typu "liczba i ³añcuch",
264 maj±ce warto¶æ numeryczn± 0 a ³añcuchow± "".
265 Nietrywialne dane typu liczbowo-³añcuchowego pochodz± z wej¶cia
266 i zwykle przechowywane s± w polach (zobacz sekcja 4).
268 Typ wyra¿enia okre¶lany jest przez jego kontekst. W razie potrzeby wykonywana
269 jest automatyczna konwersja typów. Na przyk³ad, wyznaczenie warto¶ci
273 y = x + 2 ; z = x "hello"
276 Warto¶æ przechowywana w zmiennej y otrzyma typ numeryczny.
277 Je¿eli x nie jest numeryczne, to warto¶æ odczytana z x zostanie
278 skonwertowana na liczbê przed dodaniem do 2 i zachowaniem w y.
279 Warto¶æ przechowywana w zmiennej z bêdzie typu ³añcuchowego: warto¶æ x
280 zostanie przekszta³cona na ³añcuch, je¶li bêdzie to niezbêdne, i z³±czona
281 z "hello". Oczywi¶cie, warto¶æ i typ przechowywane w x nie zmieniaj± siê
282 w ¿adnej z tych konwersji.
283 Wyra¿enie ³añcuchowe przekszta³cane jest na numeryczne przy zastosowaniu
284 najd³u¿szego swego przedrostka numerycznego jak w
286 Wyra¿enie numeryczne konwertowane jest na ³añcuch poprzez zast±pienie
289 .BR sprintf(CONVFMT ,
293 mo¿e byæ reprezentowane w danym komputerze jako dok³adna liczba ca³kowita,
294 wówczas przekszta³cane jest na \fBsprintf\fR("%d", \*(ex).
296 jest funkcj± wbudowan± AWK, dubluj±c± dzia³anie
300 jest wbudowan± zmienn± u¿ywan± do wewnêtrznej konwersji z liczby na ³añcuch
301 i inicjowan± na "%.6g".
302 Mo¿na wymusiæ jawn± konwersjê typów:
309 \fIwyra¿1\fP \fBop-rel\fP \fIwyra¿2\fP,
310 je¿eli oba operandy s± numeryczne lub numeryczno-³añcuchowe, to
311 porównywanie jest numeryczne; je¿eli oba operandy s± ³añcuchami to
312 porównywanie jest ³añcuchowe; je¶li jeden z operandów jest ³añcuchem, to
313 operand nie-³añcuchowy jest przekszta³cany i porównywanie jest ³añcuchowe.
314 Wynik jest numeryczny, 1 lub 0.
316 W kontekstach logicznych, jak
317 \fBif\fP ( \*(ex ) \fIinstrukcja\fP,
318 warto¶ci± wyra¿enia ³añcuchowego jest prawda wtedy i tylko wtedy, gdy
319 nie jest ono ³añcuchem pustym ""; wyra¿eñ liczbowych wtedy i tylko wtedy
320 gdy nie s± numerycznie zerem.
322 .SS "3. Wyra¿enia regularne"
323 W jêzyku AWK rekordy, pola i ³añcuchy s± czêsto sprawdzane na dopasowanie
325 .IR "wyra¿enia regularnego" .
326 Wyra¿enia regularne umieszczone s± miêdzy uko¶nikami, a
332 jest wyra¿eniem AWK o warto¶ci 1 je¶li \*(ex "pasuje do"
334 co oznacza, ¿e pewien pod³añcuch \*(ex jest w zestawie ³añcuchów
337 Je¶li nie wystêpuje dopasowanie, to wyra¿enie otrzymuje warto¶æ 0;
338 zast±pienie \fB~\fP operatorem "nie pasuje", \fB!~\fP, odwraca znaczenia.
342 /\fIr\fR/ { \fIakcja\fR } i\
343 \fB$0\fR ~ /\fIr\fR/ { \fIakcja\fR }
347 za¶ dla ka¿dego rekordu wej¶ciowego pasuj±cego do
351 Faktycznie, /\fIr\fR/ jest wyra¿eniem AWK równowa¿nym (\fB$0\fR ~ /\fIr\fR/)
352 wszêdzie z wyj±tkiem wyst±pienia po prawej stronie operatora dopasowania
353 lub przekazywania do funkcji wbudowanej oczekuj±cej jako argumentu wyra¿enia
356 AWK stosuje rozszerzone wyra¿enia regularne jak
358 Metaznakami wyra¿eñ regularnych, tj. znakami o specjalnym znaczeniu
359 w wyra¿eniach regularnych s±
362 \ ^ $ . [ ] | ( ) * + ?
365 Wyra¿enia regularne konstruowane s± ze znaków jak ni¿ej:
367 .TP \w'[^c\d1\uc\d2\uc\d3\u...]'u+1n
369 dopasowuje dowolny znak nie bêd±cy metaznakiem
373 dopasowuje znak zdefiniowany przez tê sam± sekwencjê specjaln± u¿ywan±
374 w sta³ych ³añcuchowych lub dos³owny znak
378 nie jest sekwencj± specjaln±.
381 dopasowuje dowolny znak (³±cznie ze znakiem nowej linii).
384 dopasowuje pocz±tek ³añcucha.
387 dopasowuje koniec ³añcucha.
389 \fB[\fIc\d1\uc\d2\uc\d3\u\fR...\fB]
390 dopasowuje dowolny znak z klasy \fIc\d1\uc\d2\uc\d3\u\fP... .
391 Zakres znaków oznaczany jest przez \fIc\d1\u\fP\fB\-\fP\fIc\d2\u\fP
392 wewn±trz klasy [...].
394 \fB[^\fIc\d1\uc\d2\uc\d3\u\fR...\fB]
395 dopasowuje dowolny znak nie nale¿±cy do klasy \fIc\d1\uc\d2\uc\d3\u\fP...
398 Wyra¿enia regularne konstruowane s± z innych wyra¿eñ regularnych
399 w nastêpuj±cy sposób:
401 .TP \w'[^c\d1\uc\d2\uc\d3\u...]'u+1n
403 dopasowuje \fIr\d1\u\fP, bezpo¶rednio po którym nastêpuje \fIr\d2\u\fP
406 \fIr\d1\u \fB| \fIr\d2\u
407 dopasowuje \fIr\d1\u\fP lub \fIr\d2\u\fP (alternatywa).
410 dopasowuje zero lub wiêcej wyst±pieñ \fIr\fP .
413 dopasowuje jedno lub wiêcej \fIr\fP.
416 dopasowuje zero lub jedno \fIr\fP.
419 dopasowuje \fIr\fP, umo¿liwiaj±c grupowanie.
422 Operatory wed³ug rosn±cego priorytetu: alternatywa, konkatenacja
423 (z³±czenie) i operatory jednoargumentowe (*, + lub ?).
428 /^[_a\-zA-Z][_a\-zA\-Z0\-9]*$/ i
429 /^[\-+]?([0\-9]+\e\|.?|\e\|.[0\-9])[0\-9]*([eE][\-+]?[0\-9]+)?$/
432 dopasowuj± odpowiednio identyfikatory AWK i sta³e liczbowe AWK.
433 Zauwa¿, ¿e kropka \fB.\fP musi byæ chroniona odwrotnym uko¶nikiem, by zosta³a
434 rozpoznana jako kropka dziesiêtna, a nie dopasowanie dowolnego znaku,
435 a metaznaki wewn±trz klas znaków trac± swe specjalne znaczenie.
437 Po prawej stronie operatorów ~ lub !~ mo¿e zostaæ u¿yte dowolne wyra¿enie.
438 Podobnie, dowolne wyra¿enie mo¿na przekazaæ do funkcji wbudowanej oczekuj±cej
439 wyra¿enia regularnego.
440 W razie potrzeby zostanie ono przekszta³cone na ³añcuch, a nastêpnie
441 zinterpretowane jako wyra¿enie regularne. Na przyk³ad,
444 BEGIN { identifier = "[_a\-zA\-Z][_a\-zA\-Z0\-9]*" }
449 wypisuje wszystkie wiersze zaczynaj±ce siê od jakiego¶ identyfikatora AWK.
452 rozpoznaje puste wyra¿enie regularne, //\|, dopasowuj±ce ³añcuch pusty.
453 Zatem pasuje do niego dowolny ³añcuch na pocz±tku, koñcu i pomiêdzy dowolnym
454 znakiem. Na przyk³ad,
457 echo abc | mawk '{ gsub(//, "X") ; print }'
462 .SS "4. Rekordy i pola"
463 Rekordy czytane s± po jednym na raz, i przechowywane w zmiennej
465 Rekord rozbijany jest na
473 ustawiana jest na liczbê pól, a
486 s± obliczane ponownie.
492 jest ponownie tworzone przez z³±czenie kolejnych pól separowanych przez
494 Przypisanie do pola o indeksie wiêkszym od
498 i powoduje ponowne utworzenie
501 Dane wej¶ciowe przechowywane w polach s± ³añcuchami, chyba ¿e ca³e pole
502 ma postaæ numeryczn± a wówczas typ jest liczbowo-³añcuchowy.
507 mawk '{ print($1>100, $1>"100", $2>100, $2>"100") }'
516 jest liczbowo-³añcuchowe. Pierwsze porównanie jest numeryczne, drugie
517 ³añcuchowe, trzecie ³añcuchowe (100 jest konwertowane na "100"),
518 i ostatnie ³añcuchowe.
520 .SS "5. Wyra¿enia i operatory"
522 Sk³adnia wyra¿eñ jest podobna jak w C. Wyra¿eniami pierwotnymi s± sta³e
523 liczbowe, sta³e ³añcuchowe, zmienne, pola, tablice i wywo³ania funkcji.
524 Identyfikator zmiennej, tablicy b±d¼ funkcji mo¿e byæ ci±giem liter, cyfr
525 i znaków podkre¶lenia, nie rozpoczynaj±cym siê od cyfry.
526 Zmienne nie s± deklarowane; zaistniej± przy pierwszym do nich odwo³aniu,
530 Nowe wyra¿enia tworzone s± z u¿yciem poni¿szych, podanych w kolejno¶ci
531 rosn±cego priorytetu, operatorów:
535 .vs +2p \" open up a little
536 \fIprzypisanie\fR = += \-= *= /= %= ^=
539 \fIlogiczne and\fR &&
540 \fIprzynale¿no¶æ do tablicy\fR \fBin
541 \fIdopasowanie\fR ~ !~
542 \fIrelacyjne\fR < > <= >= == !=
543 \fIkonkatenacja\fR (bez specjalnego operatora)
544 \fIdodawanie/odejmowanie\fR + \-
545 \fImno¿enie/dzielenie\fR * / %
546 \fIjednoargumentowe\fR + \-
549 \fIinkrementacja/dekr.\fR ++ \-\|\- (zarówno post jak i pre)
555 Przypisanie, operatory warunkowe i potêgowanie wi±¿± od prawej do lewej;
556 pozosta³e od lewej do prawej. Ka¿de wyra¿enie mo¿e byæ umieszczone
560 .ds ae \fItablica\fR[\fIwyra¿\fR]
561 Awk obs³uguje tablice jednowymiarowe. Elementy tablic wskazuje siê jako \*(ae.
563 jest przekszta³cane wewnêtrznie na typ ³añcuchowy, wiêc, na przyk³ad,
564 A[1] i A["1"] s± tym samym elementem, a faktycznym indeksem jest "1".
565 Tablice indeksowane ³añcuchami zwane s± tablicami asocjacyjnymi (tablicami
566 przyporz±dkowuj±cymi).
567 Pierwotnie tablica jest pusta; elementy zaistniej± przy pierwszym do nich
570 \fIwyra¿\fB in\fI tablica\fR
571 daje w wyniku 1 je¿eli istnieje \*(ae, w przeciwnym razie 0.
573 Istnieje postaæ instrukcji
575 wykonuj±ca pêtlê po wszystkich indeksach tablicy.
578 \fBfor\fR ( \fIzmn\fB in \fItablica \fR) \fIinstrukcja\fR
589 przechodzi przez indeksy
591 nie jest zdefiniowana.
599 obs³uguje rozszerzenie,
602 które usuwa wszystkie elementy
605 Tablice wielowymiarowe tworzone s± sztucznie przez konkatenacjê
606 z zastosowaniem wbudowanej zmiennej
608 \fItablica\fB[\fIwyra¿\d1\u\fB,\fIwyra¿\d2\u\fB]\fR
610 \fItablica\fB[\fIwyra¿\d1\u \fBSUBSEP \fIwyra¿\d2\u\fB]\fR.
611 Sprawdzanie elementu tablicy wielowymiarowej u¿ywa indeksu w nawiasach,
615 if ( (i, j) in A ) print A[i, j]
619 .SS "7. Zmienne wbudowane"
621 Poni¿sze zmienne s± zmiennymi wbudowanymi. S± one inicjowane przed wykonaniem
626 liczba argumentów wiersza poleceñ.
629 tablica argumentów wiersza poleceñ, 0..ARGC-1.
632 format do wewnêtrznej konwersji liczb na ³añcuchy, pocz±tkowo = "%.6g".
635 tablica zaindeksowana zmiennymi ¶rodowiska. £añcuch ¶rodowiska,
636 \fIzmn=warto¶æ\fR przechowywany jest jako
637 .BI ENVIRON[ zmn "] ="
641 nazwa bie¿±cego pliku wej¶ciowego.
644 numer bie¿±cego rekordu w
648 dzieli rekordy na pola jako wyra¿enie regularne.
651 liczba pól bie¿±cego rekordu.
654 numer bie¿±cego rekordu w ca³kowitym strumieniu wej¶ciowym.
657 format do wydruku liczb; pocz±tkowo = "%.6g".
660 wstawiane pomiêdzy polami w wyj¶ciu, pocz±tkowo = " ".
663 koñczy ka¿dy z rekordów wyj¶ciowych, pocz±tkowo = "\en".
666 d³ugo¶æ ustawiona przez ostatnie wywo³anie wbudowanej funkcji
670 separator rekordów wej¶ciowych, pocz±tkowo = "\en".
673 indeks ustawiony przez ostatnie wywo³anie
677 u¿ywany do budowy indeksów tablic wielowymiarowych, pocz±tkowo = "\e034".
680 .SS "8. Funkcje wbudowane"
684 .RI \fBgsub\fP( r , s , t ") \fBgsub\fP(" r , s )
685 Zastêpowanie globalne (global substitution), ka¿de dopasowanie wyra¿enia
690 zastêpowane jest ³añcuchem
692 Zwracana jest liczba wykonanych zast±pieñ.
697 Znak \fB&\fP w ³añcuchu zastêpuj±cym
699 zastêpowany jest dopasowanym pod³añcuchem ³añcucha
701 \fB\e&\fP oraz \fB\e\e\fP daj±, odpowiednio, dos³owne \fB&\fP i \fB\e\fP
702 w ³añcuchu zastêpuj±cym.
704 .RI \fBindex\fP( s , t )
709 to zwracana jest pozycja, na której rozpoczyna siê
711 w przeciwnym razie zwracane jest 0.
716 .RI \fBlength\fP( s )
717 Zwraca d³ugo¶æ ³añcucha
720 .RI \fBmatch\fP( s , r )
721 Zwraca indeks pierwszego najd³u¿szego dopasowania wyra¿enia regularnego
725 Zwraca 0 je¶li nie wystêpuje dopasowanie.
726 Jako skutek uboczny, nastêpuje ustawienie
730 ustawiane jest na d³ugo¶æ dopasowania lub \-1 je¶li brak dopasowania.
731 Je¿eli dopasowano ³añcuch pusty, to
733 ustawiane jest na 0, a zwracane jest 1 je¶li dopasowanie by³o na pocz±tku,
734 za¶ length(\fIs\fR)+1, gdy na koñcu ³añcucha.
736 .RI \fBsplit\fP( s , A , r ") \fBsplit\fP(" s , A )
739 rozbijany jest na pola przez wyra¿enie regularne
741 a pola wpisywane s± do tablicy
743 Zwracana jest liczba pól. Szczegó³y w sekcji 11 poni¿ej.
749 .RI \fBsprintf\fP( format , lista-wyra¿ )
750 Zwraca ³añcuch utworzony z
754 Zobacz opis printf() poni¿ej.
756 .RI \fBsub\fP( r , s , t ") \fBsub\fP(" r , s )
757 Pojedyncze zast±pienie. Takie samo, jak gsub(), z wyj±tkiem tego, ¿e
758 wykonywane jest co najwy¿ej jedno zast±pienie.
760 .RI \fBsubstr\fP( s , i , n ") \fBsubstr\fP(" s , i )
761 Zwraca pod³añcuch ³añcucha
763 poczynaj±c od indeksu
769 zwracana jest koñcówka
771 poczynaj±c od pozycji
774 .RI \fBtolower\fP( s )
777 ze wszystkimi du¿ymi literami przekszta³conymi na ma³e.
779 .RI \fBtoupper\fP( s )
782 ze wszystkimi ma³ymi literami przekszta³conymi na du¿e.
789 \fBatan2\fR(\fIy\fR,\fIx\fR) arcus tangens z \fIy\fR/\fIx\fR pomiêdzy -PI i PI.
791 \fBcos\fR(\fIx\fR) funkcja cosinus, \fIx\fR w radianach.
793 \fBexp\fR(\fIx\fR) funkcja wyk³adnicza.
795 \fBint\fR(\fIx\fR) zwraca \fIx\fR obciête w stronê zera.
797 \fBlog\fR(\fIx\fR) logarytm naturalny.
799 \fBrand\fR() zwraca liczbê losow± miêdzy zero a jeden.
801 \fBsin\fR(\fIx\fR) funkcja sinus, \fIx\fR w radianach.
803 \fBsqrt\fR(\fIx\fR) zwraca pierwiastek kwadratowy z \fIx\fR.
806 .RI \fBsrand\fP( wyra¿ ") \fBsrand\fP()"
807 Inicjuje ziarenko generatora liczb losowych, u¿ywaj±c zegara je¶li pominiêto
809 i zwraca warto¶æ poprzedniego ziarenka losowego.
811 inicjuje generator liczb losowych wed³ug zegara przy uruchomieniu,
812 wiêc nie ma faktycznej potrzeby wywo³ywania srand(). Srand(\fIwyra¿\fR)
813 przydaje siê do powtarzania ci±gów pseudolosowych.
816 .SS "9. Wej¶cie i wyj¶cie"
817 Istniej± dwie instrukcje wyj¶cia:
824 zapisuje na standardowe wyj¶cie
827 \fBprint\fP \fIwyra¿\d1\u\fR, \fIwyra¿\d2\u\fR, ..., \fIwyra¿\dn\u
828 zapisuje na standardowe wyj¶cie
829 \fIwyra¿\d1\u \fBOFS \fIwyra¿\d2\u \fBOFS\fR ... \fIwyra¿\dn\u
831 Wyra¿enia numeryczne s± konwertowane na ³añcuchy zgodnie z
834 \fBprintf \fIformat\fR, \fIlista-wyra¿
835 powiela funkcjê biblioteczn± printf z C, pisz±c na standardowe wyj¶cie.
836 Rozpoznawany jest komplet specyfikacji formatów z ANSI C z konwersjami
837 %c, %d, %e, %E, %f, %g, %G, %i, %o, %s, %u, %x, %X i %%,
838 oraz kwalifikatorami konwersji h i l.
841 Lista argumentów print lub printf mo¿e byæ opcjonalnie ujêta w nawiasy.
842 Print formatuje liczby przy pomocy
844 lub "%d" dla dok³adnie ca³kowitych.
845 "%c" z argumentem numerycznym wypisuje odpowiedni znak 8-bitowy, z argumentem
846 ³añcuchowym wypisuje pierwszy znak ³añcucha.
847 Wyj¶cie print i printf mo¿na przekierowaæ do pliku lub polecenia do³±czaj±c
855 na koñcu instrukcji drukowania.
856 Przekierowanie otwiera
860 tylko raz, kolejne przekierowania do³±czane s± do ju¿ otwartego strumienia.
863 ³±czy nazwê pliku "/dev/stderr" z stderr, co pozwala na przekierowanie
864 wyników print i printf na standardowe wyj¶cie diagnostyczne.
866 wi±¿e równie¿, odpowiednio, "\-" i "/dev/stdout" z stdin i stdout, co
867 umo¿liwia przysy³anie tych strumieni do funkcji.
871 ma nastêpuj±ce warianty:
886 z \fIpliku\fP, aktualizuje pola i
890 czyta nastêpny rekord do zmiennej
897 .B getline \fIzmn\fP < \fIplik
898 czyta nastêpny rekord
903 \fIpolecenie\fB | getline
904 przesy³a potokiem rekord z
911 \fIpolecenie\fB | getline \fIzmn
912 przesy³a potokiem rekord z
918 Getline zwraca 0 na koñcu pliku, \-1 przy b³êdzie, w pozosta³ych
921 Polecenia na koñcu potoków wykonywane s± przez /bin/sh.
923 Funkcja \fBclose\fR(\*(ex) zamyka plik lub potok skojarzony z
925 Close zwraca 0 je¿eli
927 jest otwartym plikiem, kod zakoñczenia je¶li
929 jest poleceniem potoku, a \-1 w pozosta³ych przypadkach.
930 Close stosowane jest do ponownego odczytu pliku lub polecenia, upewnienia
931 siê, ¿e drugi koniec potoku wyj¶ciowego jest zakoñczony lub do zachowania
933 .\" conserve file resources.
935 Funkcja \fBfflush\fR(\*(ex) wymiata plik wyj¶ciowy lub potok skojarzony z
937 Fflush zwraca 0 je¶li
939 jest otwartym strumieniem wyj¶ciowym, w przeciwnym razie \-1.
940 Fflush bez argumentu opró¿nia stdout.
941 Fflush z pustym argumentem ("") opró¿nia wszystkie otwarte wyj¶cia.
944 \fBsystem\fR(\fIwyra¿\fR)
949 i zwraca kod zakoñczenia polecenia
953 nie s± przekazywane poleceniom wykonywanym przez
956 .SS "10. Funkcje definiowane przez u¿ytkownika"
957 Funkcja definiowana przez u¿ytkownika ma nastêpuj±c± sk³adniê:
960 \fBfunction\fI nazwa\fR( \fIargumenty\fR ) { \fIinstrukcje\fR }
963 Cia³o funkcji mo¿e zawieraæ instrukcjê zwrócenia warto¶ci (return)
966 \fBreturn\fI opcjonalne-wyra¿\fR
969 Instrukcja return nie jest wymagana.
970 Wywo³ania funkcji mog± byæ zagnie¿d¿ane lub rekurencyjne.
971 Wyra¿enia przekazywane s± funkcjom przez warto¶æ a tablice przez wskazanie.
972 Dodatkowe argumenty s³u¿± jako zmienne lokalne i s± inicjowane na
984 function csplit(s, A, n, i)
987 for( i = 1 ; i <= n ; i++ ) A[i] = substr(s, i, 1)
992 Wstawienie dodatkowych odstêpów pomiêdzy przekazywanymi parametrami
993 a zmiennymi lokalnymi wynika z konwencji.
994 Do funkcji mo¿na odwo³ywaæ siê przed ich zdefiniowaniem, ale nazwa funkcji
995 i nawias '(' rozpoczynaj±cy listê argumentów musz± siê stykaæ, by unikn±æ
996 pomy³ki z konkatenacj±.
998 .SS "11. Podzia³ ³añcuchów, rekordów i plików"
999 Programy awk u¿ywaj± tego samego algorytmu do rozbicia ³añcuchów na tablice
1000 przy pomocy split() i rekordów na pola wed³ug
1003 stosuje zasadniczo ten sam algorytm przy podziale plików na rekordy
1007 .RI \fBSplit\fP( wyra¿ , A, sep )
1014 to jest on zastêpowany przez
1017 mo¿e byæ wyra¿eniem lub wyra¿eniem regularnym. Je¿eli jest wyra¿eniem typu
1018 nie-³añcuchowego, to jest przekszta³cane na ³añcuch.
1023 = " " (pojedyncza spacja),
1024 to <ODSTÊP> jest obcinana z pocz±tku i koñca
1028 staje siê <ODSTÊPEM>.
1030 definiuje <ODSTÊP> jako wyra¿enie regularne
1032 W przeciwnym wypadku
1034 traktowany jest jako wyra¿enie regularne, z wyj±tkiem tego, ¿e metaznaki
1035 dla ³añcucha o d³ugo¶ci 1 s± ignorowane, np.
1036 split(x, A, "*") i split(x, A, /\e*/) s± tym samym.
1039 Je¿eli \*(ex nie jest ³añcuchem, jest przekszta³cane na ³añcuch.
1040 Je¿eli \*(ex jest wówczas ³añcuchem pustym "", to split() zwraca 0
1043 jest ustawiane jako puste.
1044 W przeciwnym razie, wszystkie nienak³adaj±ce siê, niepuste i najd³u¿sze
1051 na pola, które wpisywane s± do
1053 Pola s± umieszczane w
1054 A[1], A[2], ..., A[n] a split() zwraca n, liczbê pól, równ± liczbie dopasowañ
1058 wygl±daj±ce na numeryczne otrzymuj± typ liczbowo-³añcuchowy.
1061 Podzia³ rekordów na pola dzia³a tak samo, z wyj±tkiem tego, i¿ czê¶ci
1070 jest ustawiane na 0 a wszystkie
1075 dzieli pliki na rekordy przy pomocy tego samego algorytmu, ale z t± niewielk±
1078 jest faktycznie ci±giem koñcz±cym a nie separatorem.
1079 (\fBORS\fR te¿ jest faktycznie ci±giem koñcz±cym).
1095 je¿eli zawarto¶ci± pliku wej¶ciowego jest "a::b:", za¶
1098 istniej± dwa rekordy "a" i "b".
1102 = " " nie ma specjalnego znaczenia.
1108 rozbija rekord na pojedyncze znaki, i, podobnie
1109 .RI split( s , A ,"")
1110 umieszcza poszczególne znaki
1115 .SS "12. Rekordy wielowierszowe"
1120 jako wyra¿enie regularne, obs³uga rekordów wielowierszowych jest ³atwa.
1123 = "\en\en+", powoduje, ¿e rekordy rozdzielane s± co najmniej jednym pustym
1126 = " " (domy¶lnie), to pojedyncze znaki nowej linii, wed³ug zasad <ODSTÊPU>
1127 powy¿ej, staj± siê odstêpami a pojedyncze znaki nowej linii s± separatorami
1131 Na przyk³ad, je¶li w pliku jest "a\ b\enc\en\en",
1135 = "\ ", to mamy jeden rekord "a\ b\enc" z trzema polami "a", "b" i "c".
1138 = "\en", daje dwa pola "a b" i "c"; zmieniaj±c
1140 = "", otrzymujemy jedno pole identyczne jak rekord.
1143 Traktowanie wierszy ze spacjami lub tabulacjami jako pustych mo¿na uzyskaæ
1146 = "\en([\ \et]*\en)+".
1147 W celu utrzymania zgodno¶ci z innymi implementacjami awk, ustawienie
1149 = "" daje te same wyniki, co usuniêcie pustych wierszy z pocz±tku i koñca
1150 pliku i okre¶lanie rekordów tak, jakby
1153 Posix wymaga, by "\en" zawsze separowa³o rekordy gdy
1155 = "" niezale¿nie od warto¶ci
1158 nie obs³uguje tej konwencji, gdy¿ zdefiniowanie "\en" jako <ODSTÊPU>
1162 W wiêkszo¶ci przypadków zmieniaj±c
1164 w celu obs³ugi rekordów wielowierszowych, stosuje siê te¿ zmienione
1167 aby na wyj¶ciu zachowaæ odstêpy miêdzy rekordami.
1169 .SS "13. Wykonywanie programu"
1170 Ta sekcja opisuje kolejno¶æ wykonywania programu.
1173 ustawiane jest na ca³kowit± liczbê argumentów wiersza poleceñ przekazanych
1174 do fazy wykonania programu.
1176 ustawiane jest na nazwê interpretera AWK a
1179 przechowuje pozosta³e argumenty wiersza poleceñ z wyj±tkiem opcji
1184 mawk \-f prog v=1 A t=hello B
1200 Nastêpnie wykonywany jest kolejno ka¿dy z bloków
1202 Je¿eli program sk³ada siê wy³±cznie z bloków
1204 to na tym wykonywanie siê koñczy, w przeciwnym razie otwierany jest strumieñ
1205 wej¶ciowy i wykonywanie jest kontynuowane.
1209 strumieñ wej¶ciowy ustawiany jest na stdin, w przypadku przeciwnym
1210 w poszukiwaniu argumentu plikowego sprawdzane s± argumenty wiersza poleceñ
1214 Argumenty wiersza poleceñ dziel± siê na trzy grupy:
1215 argumenty plikowe, argumenty przypisañ i ³añcuchy puste "".
1216 Przypisanie ma postaæ
1217 \fIzmn\fR=\fI³añcuch\fR.
1220 jako mo¿liwego argumentu plikowego, je¶li jest ono puste to jest
1221 pomijane; je¶li jest argumentem typu przypisania, odbywa siê przypisanie
1226 zmienia siê na nastêpny argument; w pozosta³ych przypadkach
1228 jest otwierane jako wej¶cie.
1229 Je¿eli otwarcie nie powiedzie siê, wykonywanie programu jest koñczone
1231 Je¿eli ¿aden z argumentów wiersza poleceñ nie jest argumentem plikowym, to
1232 wej¶cie pochodzi z stdin.
1235 otwiera wej¶cie. "\-" jako argument plikowy oznacza stdin.
1237 Po otwarciu strumienia wej¶ciowego ka¿dy z rekordów wej¶cia sprawdzany jest
1240 a je¶li pasuje, to wykonywana jest
1242 skojarzona z danym wzorcem.
1243 Wzorzec w postaci wyra¿enia pasuje je¶li jego warto¶ci± logiczn± jest prawda
1244 (zobacz koniec sekcji 2).
1247 zestawiany jest przed rozpoczêciem odczytu wej¶cia,
1250 po przeczytaniu ca³ego wej¶cia.
1251 Wzorzec zakresu, \fIwyra¿1\fP\fB,\fP\fIwyra¿2\fP, dopasowuje
1252 ka¿dy rekord pomiêdzy rekordem pasuj±cym do
1254 a rekordem pasuj±cym do
1258 Po napotkaniu koñca pliku w strumieniu wej¶ciowym, sprawdzane s± pozosta³e
1259 argumenty wiersza poleceñ w poszukiwaniu kolejnego argumentu plikowego.
1260 Je¶li taki istnieje, to jest otwierany, w przeciwnym wypadku przyjmuje siê,
1261 ¿e zosta³ dopasowany
1264 i wykonywane s± wszystkie
1268 W rozwa¿anym przyk³adzie, przypisanie
1270 ma miejsce po wykonaniu
1273 a dana umieszczona w
1275 otrzymuje typ liczbowo-³añcuchowy.
1276 Nastêpnie z pliku A jest czytane wej¶cie.
1277 Po koñcu pliku A, zmienna
1279 jest ustawiana na ³añcuch "hello", a B jest otwierany jako wej¶cie.
1280 Po osi±gniêciu koñca pliku B s± wykonywane
1285 Przebieg programu na poziomie
1288 mo¿na zmieniæ przy pomocy instrukcji
1292 \fBexit \fIwyra¿-opcjonalne\fR.
1297 powoduje, ¿e odczyt nastêpnego rekordu wej¶ciowego i ponowne sprawdzanie
1298 wzorców, od pierwszej pary
1299 .I "wzorzec {akcja}"
1303 powoduje natychmiastowe wykonanie akcji
1305 lub zakoñczenie programu, je¶li nie ma takich akcji lub je¿eli
1310 ustawia warto¶æ kodu zakoñczenia programu, chyba ¿e zostanie ona przes³oniêta
1313 lub ujawniony potem b³±d.
1322 { chars += length($0) + 1 # dodaje jeden dla \en
1326 END{ print NR, words, chars }
1328 3. zliczanie niepowtarzaj±cych siê "faktycznych s³ów".
1330 BEGIN { FS = "[^A-Za-z]+" }
1332 { for(i = 1 ; i <= NF ; i++) word[$i] = "" }
1334 END { delete word[""]
1335 for ( i in word ) cnt++
1340 4. sumowanie drugiego pola ka¿dego rekordu w oparciu
1344 $1 ~ /credit\||\|gain/ { sum += $2 }
1345 $1 ~ /debit\||\|loss/ { sum \-= $2 }
1349 5. sortowanie pliku, porównywanie ³añcuchowe
1351 { line[NR] = $0 "" } # wymusza typ porównywania: gdyby
1352 # jakie¶ wiersze wygl±da³y
1355 END { isort(line, NR)
1356 for(i = 1 ; i <= NR ; i++) print line[i]
1359 #sortowanie A[1..n] metod± wstawiania
1360 function isort( A, n, i, j, hold)
1362 for( i = 2 ; i <= n ; i++)
1365 while ( A[j\-1] > hold )
1366 { j\-\|\- ; A[j+1] = A[j] }
1369 # w razie potrzeby bêdzie utworzony wartownik A[0] = ""
1373 .SH "KWESTIE ZGODNO¦CI"
1374 Posix-owa 1003.2 (propozycja 11.3) definicja jêzyka AWK jest AWK opisanym
1375 w ksi±¿ce AWK z kilkoma rozszerzeniami, jakie pojawi³y siê w nawk
1376 z SystemVR4. Rozszerzeniami tymi s±:
1379 Nowe funkcje: toupper() i tolower().
1381 Nowe zmienne: ENVIRON[\|] i CONVFMT.
1383 Specyfikacje konwersji w printf() i sprintf() wziête z ANSI C.
1385 Nowe opcje polecenia: \-v zmn=warto¶æ, wielokrotne opcje -f i opcje
1386 charakterystyczne dla implementacji jako argumenty \-W.
1390 Posix-owy AWK przetwarza pojedyncze wiersze plików.
1392 mo¿na zmieniæ z "\en" na inny pojedynczy znak, ale trudno jest znale¼æ
1393 jakie¶ tego zastosowanie \(em w ksi±¿ce AWK brak odpowiednich przyk³adów.
1394 Zgodnie z konwencj±, \fBRS\fR = "", powoduje, ¿e jeden lub wiêcej pustych
1395 wierszy rozdziela rekordy, umo¿liwiaj±c obs³ugê rekordów wielowierszowych.
1396 Gdy \fBRS\fR = "", "\en" jest zawsze separatorem pól, niezale¿nie od warto¶ci
1403 by³o wyra¿eniem regularnym.
1404 Pojawiaj±ce siê w rekordach "\en" jest traktowane jak odstêp, a
1406 zawsze okre¶la pola.
1408 Pozbycie siê paradygmatu operowania pojedynczym wierszem mo¿e upro¶ciæ
1409 niektóre programy i czêsto poprawiæ wydajno¶æ. Na przyk³ad, zmienieniony
1410 przyk³ad 3 (zobacz powy¿ej),
1413 BEGIN { RS = "[^A-Za-z]+" }
1417 END { delete word[ "" ]
1418 for( i in word ) cnt++
1423 zlicza ilo¶æ niepowtarzaj±cych siê s³ów przez
1424 traktowanie ka¿dego s³owa jako rekordu.
1425 Przy plikach ¶rednich rozmiarów
1427 wykonuje go dwukrotnie szybciej, dziêki uproszczonej pêtli wewnêtrznej.
1429 Poni¿szy program zastêpuje ka¿dy z komentarzy w pliku programu C
1434 RS = "/\|\e*([^*]\||\|\e*+[^/*])*\e*+/"
1435 # komentarz jest separatorem rekordów
1440 { print hold ; hold = $0 }
1442 END { printf "%s" , hold }
1445 Buforowanie rekordu jest niezbêdne, by unikn±æ zakoñczenia ostatniego
1450 poni¿sze wyra¿enia s± równowa¿ne,
1453 x ~ /a\e+b/ x ~ "a\e+b" x ~ "a\e\e+b"
1456 Powy¿sze ³añcuchy bêd± analizowane dwukrotnie: raz jako ³añcuch i raz jako
1457 wyra¿enie regularne. Przy analizie ³añcucha
1459 ignoruje stosowanie cytowania odwrotnym uko¶nikiem do znaków nie bêd±cych
1460 znakami specjalnymi, zatem
1464 Natomiast ksi±¿ka AWK przychyla siê do tego, by
1466 by³o rozpoznawane jako
1468 co wymaga podwojonego cytowania metaznaków w ³añcuchach.
1469 Posix wprost odmawia zdefiniowania po¿±danego zachowania, przez co
1470 po¶rednio wymusza na programach musz±cych dzia³aæ z ró¿nymi wersjami
1471 awk stosowanie bardziej przeno¶nego, lecz mniej czytelnego, cytowania
1472 z u¿yciem podwójnych odwrotnych uko¶ników.
1474 Posix-owy AWK nie rozpoznaje "/dev/std{out,err}" ani sekwencji
1475 specjalnej \ex hex w ³añcuchach. W przeciwieñstwie do ANSI C,
1477 ogranicza liczbê cyfr, jakie mog± wystêpowaæ po \ex do dwóch, gdy¿ obecna
1478 implementacja obs³uguje tylko znaki 8-bitowe.
1481 pojawi³o siê po raz pierwszy w ostatnim (1993) awk AT&T wydanym dla netlib,
1482 i nie jest czê¶ci± standardu Posix. Ca³o¶ciowe usuwanie tablicy przez
1485 nie jest czê¶ci± standardu Posix.
1487 Posix jawnie zostawia niezdefiniowane zachowanie siê
1489 = "" i wspomina o podziale rekordów na znaki jako
1490 mo¿liwej interpretacji, ale obecnie takie zastosowanie nie jest przeno¶ne
1491 miêdzy implementacjami.
1493 Na koniec, sposób w jaki
1495 obs³uguje przypadki wyj±tkowe nie opisane w ksi±¿ce AWK ani w propozycji
1496 Posix. Niebezpiecznie jest zak³adanie spójno¶ci pomiêdzy implementacjami
1497 awk, a bezpiecznie przej¶æ do nastêpnej sekcji.
1500 substr(s, i, n) zwraca znaki ³añcucha s o pozycjach z czê¶ci wspólnej
1501 przedzia³u zamkniêtego [1, length(s)] i pó³otwartego [i, i+n). Gdy
1502 czê¶æ wspólna jest pusta, zwracany jest ³añcuch pusty; zatem
1503 substr("ABC", 1, 0) = "" a substr("ABC", \-4, 6) = "A".
1505 Ka¿dy ³añcuch, nawet pusty, pasuje pocz±tkiem do ³añcucha pustego, wiêc
1506 s ~ // i s ~ "", s± zawsze równe 1, tak jak match(s, //) i match(s, "").
1507 Ostanie dwa ustawiaj±
1511 index(s, t) jest zawsze tym samym, co match(s, t1), gdzie t1, to to samo, co
1512 t z cytowanymi metaznakami. St±d spójno¶æ z match wymaga, by index(s, "")
1514 Równie¿ warunek: index(s,t) != 0 wtedy i tylko wtedy, gdy t jest pod³añcuchem
1515 ³añcucha s, wymusza by index("","") = 1.
1517 Je¿eli getline napotka koniec pliku, getline zmn pozostawia zmienn± zmn
1518 bez zmian. Podobnie, w momencie rozpoczêcia akcji
1524 pozostaj± niezmienione od ostatniego rekordu.
1528 Aho, Kernighan and Weinberger,
1529 .IR "The AWK Programming Language" ,
1530 Addison-Wesley Publishing, 1988, (ksi±¿ka AWK),
1531 definiuje jêzyk, rozpoczynaj±c siê samouczkiem a dochodz±c do wielu
1532 interesuj±cych programów i wchodz±c g³êboko w kwestie projektowania
1533 i analizy programów istotne przy programowaniu w ka¿dym jêzyku.
1535 .IR "The GAWK Manual" ,
1536 The Free Software Foundation, 1991, stanowi podrêcznik i opis
1537 jêzyka nie usi³uj±cy siêgn±æ g³êbi ksi±¿ki AWK. Zak³ada, ¿e
1538 czytelnik mo¿e byæ pocz±tkuj±cym programist±. Sekcja po¶wiêcona tablicom
1539 w AWK jest doskona³a. Omawia tak¿e wymagania stawiane AWK przez Posix.
1542 nie obs³uguje znaku ascii NUL \e0 w plikach ¼ród³owych czy plikach danych.
1543 Mo¿na wypisaæ NUL przy pomocy printf z %c, a w wej¶ciu
1544 s± dopuszczalne wszystkie inne znaki 8-bitowe.
1547 implementuje printf() i sprintf() przy pomocy funkcji bibliotecznych C,
1548 printf i sprintf, wiêc pe³na zgodno¶æ z ANSI wymaga biblioteki ANSI C.
1549 W praktyce oznacza to, ¿e kwalifikator konwersji h mo¿e nie byæ dostêpny.
1551 przejmuje te¿ wszystkie b³êdy czy ograniczenia tych funkcji.
1553 Twórcy implementacji jêzyka AWK ukazali zgodny brak wyobra¼ni
1554 w nazywaniu swych programów.
1556 Mike Brennan (brennan@whidbey.com).