%& --translate-file=il2-pl
%%  ***
%%  Ściąga do AWK. wersja 1.0
%%  Copyright (c) T. Przechlewski, listopad 1999
%%  Uwagi i poprawki proszę kierować na adres: ekotp@univ.gda.pl
%%  ***
%%  *** 1-a wersja *** 12-11-1999 *** tp ***
%%
\def\PLCopyHolders{T.~Przechlewski}
\newif\ifproofmode %\proofmodetrue
\newif \ifEightPages  \EightPagesfalse
\ifx\pdfoutput\undefined \input colordvi.tex
\else \input pdfcolor.tex \pdfpageheight=220mm 
\pdfinfo{/Title (Sciaga do AWK) /Author(Tomasz Przechlewski) /Subject(AWK) 
/Keywords(AWK)}
\fi
\ifEightPages
\font \rm = qtmr at 9pt
\font \eightrm = qtmr at 8pt
\font \rmfootline = plss8
\font \ttfootline = pltt8
\font \bf = plbx9
\font \it = qtmri at 9pt 
\font \tt = pltt9
\font \titlefont = qhvb at8.0pt
\font \sectionfont = qhvb at9.5pt
\font \ssetcionfont = qhvb at9.5pt
\baselineskip10.80pt
%
\else
\font \rm = qtmr at 8.0pt
%\font \sf = qhvr at 8.0pt
\font \sf = qtmr at 8.0pt
\font \eightrm = qtmr at 7pt
\font \copyrfont = qtmr at 6.5pt
%\font \copyrfontsl = plsl10 at 6.5pt
\font \copyrfontsl = qtmrsl at 6.5pt
\font \copyrfonttt = pltt10 at 6.5pt
\font \rmfootline = qtmb at7pt
\font \ttfootline = pltt8
\font \bf = qtmb at8.0pt
\font \it = qtmri at 8.0pt 
%\font \sl = plsl8
\font \sl = qtmrsl at 8pt % ./a2t qtmr -Ll.qx -Ee.qx -I9.485 -Nqtmrsl
\font \tt = pltt8 at8.0pt %%%
%\font \titlefont = qhvb at7.2pt
%\font \sectionfont = qhvb at8.0pt
%\font \ssectionfont = qhvb at8.2pt
%\font \TITLEFONT = qhvb at 11pt
\font \titlefont = qtmb at8.0pt
\font \sectionfont = qtmb at8.5pt
\font \ssectionfont = qtmb at8.0pt
\font \TITLEFONT = qtmb at 11pt
\font \syfont = plsy8 \textfont2\syfont  %%
\baselineskip8.7pt
%\special{landscape}
\fi
%
\textfont1\it \textfont0\rm %%
\rm
\let \tenrm  \eightrm
\parindent12pt
%
\newdimen\HruleThickness \newdimen\VruleThickness
\HruleThickness= 0.4pt \VruleThickness = 0.4pt
\def\Hrule{\hrule height\HruleThickness}
\def\Vrule{\vrule width\VruleThickness}
\newdimen\MarginSep   \MarginSep = 3pt
\newdimen\VMarginSep   \VMarginSep = 3pt
\def\MarginSepSkip{\kern\MarginSep}
\def\VMarginSepSkip{\kern\VMarginSep}
\def\cbox#1{\vbox{\halign{&\hfil##\hfil\cr#1\crcr}}}
\def\lbox#1{\vbox{\halign{&##\hfil\cr#1\crcr}}}
\def\rbox#1{\vbox{\halign{&\hfil##\cr#1\crcr}}}
\def\boxit#1{\hbox{\vbox{\CHrule\hbox{\CVrule\MarginSepSkip%
\vbox{\MarginSepSkip#1\MarginSepSkip}\MarginSepSkip\CVrule}\CHrule}}}
\long\def\Lboxit#1{\vbox{\CHrule\hbox{\CVrule\MarginSepSkip%
  \vbox{\VMarginSepSkip#1\VMarginSepSkip}%
  \MarginSepSkip\CVrule}\CHrule}}
\def\CHrule{\CurrColor{\Hrule}}
\def\CVrule{\CurrColor{\Vrule}}\def\CurrColor{\Red} %
\ifproofmode\def\PainWhite{\def\CurrColor{\Red}}\else
\def\PainWhite{\def\CurrColor{\White}}\fi
%
\newcount \skladka 
\newbox\PageBoxOne   \newbox\PageBoxTwo  \newbox\PageBoxThree 
\newbox\PageBoxFour  \newbox\PageBoxFive \newbox\PageBoxSix  
\newbox\PageBoxSeven \newbox\PageBoxEight
%
\def\smallpage{\vbox{\makeheadline\pagebody\makefootline}}
\def\XFourPages{%
    \Lboxit{\vbox{\hbox{\InsideMargin
    \box\PageBoxEight\OutsideMargin\CVrule\InsideMargin
    \box\PageBoxOne\OutsideMargin }}}}
\def\YFourPages{%
    \Lboxit{\vbox{\hbox{\InsideMargin
    \box\PageBoxTwo\OutsideMargin\CVrule\InsideMargin
    \box\PageBoxSeven \OutsideMargin }}}}
\def\ZFourPages{%
    \Lboxit{\vbox{\hbox{\InsideMargin
    \box\PageBoxSix\OutsideMargin\CVrule\InsideMargin
    \box\PageBoxThree \OutsideMargin }}}}
\def\ZZFourPages{\Lboxit{\vbox{\hbox{\InsideMargin
    \box\PageBoxFour\OutsideMargin\CVrule\InsideMargin
    \box\PageBoxFive \OutsideMargin }}}}
\def\InsideMargin{\kern12mm}\def\OutsideMargin{\kern6mm}
\VMarginSep = 2.5mm
%
\def\fourpages{%
  \global \advance\skladka 1\relax
  \ifnum\skladka = 1
     \global\setbox\PageBoxOne\smallpage
     \else
     \ifnum\skladka = 2
         \global\setbox\PageBoxTwo\smallpage
         \else
         \ifnum\skladka = 3
             \global\setbox\PageBoxThree\smallpage
             \else
             \ifnum\skladka = 4
                 \global\setbox\PageBoxFour\smallpage
                 \else
                 \ifnum\skladka = 5
                     \global\setbox\PageBoxFive\smallpage
                     \else
                     \ifnum\skladka = 6
                         \global\setbox\PageBoxSix\smallpage
                         \else
                         \ifnum\skladka = 7
                            \global\setbox\PageBoxSeven\smallpage
                            \else
                               \global\setbox\PageBoxEight\smallpage
                               \def\CurrColor{\Red}\shipout\XFourPages 
                               \PainWhite\shipout\YFourPages
                               \def\CurrColor{\Red}\shipout\ZFourPages
                               \PainWhite\shipout\ZZFourPages
                               \global \skladka=0
                         \fi
                     \fi
                 \fi
             \fi
          \fi
      \fi
  \fi
  \advancepageno
  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
%%
\def\threepages{%
  \global \advance\skladka 1 %%
  % %
  \ifnum\skladka = 1
     \global\setbox\PageBoxOne\smallpage
     \else
     \ifnum\skladka = 2
         \global\setbox\PageBoxTwo\smallpage
         \else
         \ifnum\skladka = 3
             \global\setbox\PageBoxThree\smallpage
             \else
             \ifnum\skladka = 4
                 \global\setbox\PageBoxFour\smallpage
                 \else
                 \ifnum\skladka = 5
                     \global\setbox\PageBoxFive\smallpage
                     \else
                        \global\setbox\PageBoxSix\smallpage
                        \shipout\hbox{\box\PageBoxOne\kern10.4mm
                                      \box\PageBoxTwo\kern10.4mm
                                      \box\PageBoxThree}
                        \shipout\hbox{\box\PageBoxFour\kern10.4mm
                                      \box\PageBoxFive\kern10.4mm
                                      \box\PageBoxSix}
                        \global \skladka=0
                         \fi
                     \fi
                 \fi
             \fi
        \fi
  \advancepageno
  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
%
%\ifEightPages \output{\fourpages} \else
%\output{\threepages} 
\output{\fourpages}
%\fi
%
\def\AAA{\unskip\strut}
\footline={\hss\rmfootline\folio\hss}
\def\makefootline{\baselineskip15pt\line{\rmfootline\the\footline}}
\setbox\strutbox=\hbox{\vrule height.7\baselineskip 
  depth.3\baselineskip width0pt}
%
\def\gawkextension{\begingroup\sl\ignorespaces}%
\def\endgawkextension{\endgroup}
\def\Xsummary#1{\begingroup
\def\cr{\par}\def\&{\hfill\break}%
\def\\{\indent\ignorespaces}
\SumParIndent=12pt%
\leftskip\SumParIndent \parindent=-\leftskip
\summary{#1}%
\parindent12pt \leftskip\parindent \parindent=-\leftskip}
\def\Ysummary#1{\begingroup\summary{#1}}
%
\newdimen\SumParIndent
\def\AfterHRuleSkip{\vskip1pt plus.5pt}%
\def\HHRule{\vskip1pt plus.5pt\hrule\nobreak\vskip1pt plus.5pt}%
\def\summary#1{\par 
  \medskip\begingroup
  \parindent\SumParIndent
  \def\desc{\par\nobreak \noindent\ignorespaces}% %%%
  \def\itm{\par\vskip1.5pt plus 1pt}% %%
  \centerline{\titlefont{#1}}\par\nobreak%
  \smallskip\hrule%
  \par\nobreak\AfterHRuleSkip\bgroup}
\def\Uwagi:{\par\noindent{\bf Uwagi}:}
\def\endsummary{\egroup\par\nobreak\smallskip%
  \hrule
  \par
  \vskip1.5pt
  %\egroup \hss \egroup
  \endgroup\endgroup
  \aftersumskip}
\def\aftersumskip{\par\smallskip}
\def\HEADTXT#1{\def\HEAD{#1}}
\ifEightPages \hsize = 77.5mm  \else  
  \hsize = 80.5mm
 \fi
\ifEightPages \vsize = 200.5mm \else  %\vsize = 192.5mm \fi
\vsize = 196.5mm \fi
%
\ifEightPages \advance \hoffset -18mm \else \advance \hoffset -20.4mm \fi
\ifEightPages \relax \else \advance \voffset -20mm \fi
%\advance \voffset -.5in
\hfuzz=3pt
\tolerance4050 \pretolerance2450
\hbadness3350
\doublehyphendemerits90050
%
\def\stress#1{{\it #1}}
%\input bjverb.tex %% inserted below ***
\catcode`\_=\active 
\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
%  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
  \do\#\do\^\do\^^K\do\^^A\do\%\do\~}
%
\def\uncatcodespecials % see D.E.K., pp. 344 and 380
    {\def\do##1{\catcode`##1=12}\dospecials}%
%
%\def\la{<} \def\ra{>} \def\co{,} \def\ap{'}
{\catcode`\^^I=\active \gdef^^I{\ \ \ \ }% TAB is replaced by 4 spaces; 
 \catcode`\_=\active % **** TP ****
 \catcode`\`=\active\gdef`{\relax\lq}}% this line inhibits Spanish 
                                      % ligatures ?` and !` of \tt font
\def\setupverbatim % see D.E.K., p. 381
    {\tt %
     \spaceskip=0pt \xspaceskip=0pt % just in case...
     \catcode`\^^I=\active %
     \catcode`\_=\active\gdef_##1_{{\it ##1}}% **** TP ****
     \catcode`\`=\active %
     \def\par{\leavevmode\endgraf}% this causes that empty lines aren't 
                                  % skipped
     \obeylines \uncatcodespecials \obeyspaces %
     }%
{\obeyspaces \global\let =\ }% this causes that leading blanks aren't 
                             % skipped cf. also def's of \space, \endgraf, \lq,
                             % \obeyspaces, and \obeylines, 
                             % D.E.K., pp. 351-352
%
% see D.E.K., p. 382
\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}%
\def\verbatim{\begingroup\setupverbatim\doverbatim}%
%----------
%\def\dodoubleverbatim#1#2{\def\next##1#1#2{##1\endgroup}\next}%
%\def\doubleverbatim{\begingroup\setupverbatim\dodoubleverbatim}%
%----------
%\def\dotripleverbatim#1#2#3{\def\next##1#1#2#3{##1\endgroup}\next}%
%\def\tripleverbatim{\begingroup\setupverbatim\dotripleverbatim}%
\let\verb \verbatim
%
%\endinput
%
%
\def\section#1{\removelastskip\medskip
  \leftline{\sectionfont #1}\par\nobreak \noindent \ignorespaces }
\def\subsection#1{\removelastskip \medskip
 \leftline{\ssectionfont #1}\par\smallskip}
\def\AWK{AWK}
\def\COPYR{\begingroup\def\Cpr{\char164}%
\smallskip \hrule \smallskip \parindent0pt \parskip3pt
\copyrfont \baselineskip7.3pt
\leftline{\bf Copying Permissions} \endgraf\smallskip
Copyright {\Cpr} 1996, 1997 Free Software Foundation, Inc. \endgraf
Copyright for modified Polish version {\Cpr} 1999 
\PLCopyHolders \endgraf

Permission is granted to make and distribute verbatim copies of this
reference card provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
reference card 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
reference card 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.
\endgroup}
%
% -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- %
%
\centerline{\TITLEFONT Ściąga do AWK*\vfootnote{\copyrfont *}%
{\baselineskip6.5pt
\let\tt \copyrfonttt \let\sl \copyrfontsl
\copyrfont Opracowana na podstawie ,,AWK reference card'' Arnolda Robbinsa.
W~tekście przedstawiono standard \AWK-a oraz rozszerzenia
interpretera {\tt gawk}. Opis rozszerzeń jest oznaczony \gawkextension 
za pomocą pisma pochyłego\endgawkextension.\endgraf}}
%\smallskip
%
\section{Uruchamianie programu}
Jeżeli program \AWK-owy jest
krótki, to najprościej jest umieścić go pomiędzy znakami 
\stress{pojedynczego\/}
cudzysłowa w~linii poleceń, jeżeli jest dłuższy
wpisać do pliku i~uruchamiać z~opcją~\verb+-f+: 
\par
\verb+awk '_program_' _plik1_ _plik2_ _..._+ \par
\verb+awk -f _plik-z-programem_ _plik1_ _plik2_ _..._+\par

\section {Argumenty wywołania programu}
\noindent
Standardowe argumenty wywołania programu umożliwiają określenie
separatora pól, przypisanie zmiennym początkowych wartości oraz
wskazanie pliku źródłowego z~programem AWK-owym.

\Ysummary{Argumenty wywołania programu }%
\halign to\hsize{\vtop{\hsize.15\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.82\hsize\parindent0pt #\AAA}\cr
Argument & Znaczenie \cr \noalign{\HHRule} \cr
\verb+-F _sp_+       & separatorem pól będzie \verb+_sp_+. \cr
\verb+-v_zm_=_war_+  & przypisuje zmiennej \verb+_zm_+ wartość \verb+_war_+,
   przed rozpoczęciem wykonywania programu. \cr
\verb+-f _plik_+     & czyta program źródłowy z~\verb+_pliku_+.
   Opcję \verb+-f+ można podać wielokrotnie. \cr
\verb+--+            & koniec opcji. \cr
}
\endsummary

\section {Wykonanie programu}
\noindent
Programy w~AWK składają się z~par \stress{wzorzec-procedura} oraz,
opcjonalnie, z~definicji funcji: \par
\verb+_wzorzec_{_procedura_}+ \par
\verb+function _nazwa_(_parametry-formalne_){_polecenia_}+ \par
%
\noindent
Kolejność wykonania programu jest następująca. Najpierw przypisywane
są wartości wszystkim zmiennym, określonym w~opcji \verb+-v+.
Następnie wykonywane są procedury ze wzorców \verb+BEGIN+ (jeżeli
takie znajdują się w~programie). Z~kolei czytane są pliki od~1 do
\verb+ARGC-1+ z~tablicy \verb+ARGV+.  Modyfikowanie
\verb+ARGC+/\verb+ARGV+ umożliwia kontrolę nad plikami wejściowymi,
które mają być wczytane przez AWK.

Jeżeli argumenty wywołania programu mają postać \verb+_zm_=_wart_+, to
taki argument jest traktowany jako przypisanie zmiennej \verb+_zm_+
wartości \verb+_wart_+. Przypisanie to ma miejsce po wykonaniu
procedury \verb+BEGIN+.

Jeżeli wartością elementu \verb+ARGV+ jest napis pusty, AWK pomija go
i~nie traktuje jako nazwy pliku do przeczytania.

Jeżeli program składa się wyłącznie ze wzorca (lub wzorców)
\verb+BEGIN+, to AWK nie przetwarza żadnych plików wejściowych.
Jeżeli program składa się wyłącznie ze wzorców \verb+END+ to AWK czyta
dane wejściowe (ze standardowego wejścia).

\section {Wyrażenia regularne}
\noindent
Składnia wyrażeń regularnych jest poszerzoną wersją z~programu
\verb+egrep+. Znak tworzący słowo to: litera, cyfra oraz znak
podkreślenia.
\Ysummary{Wyrażenia regularne wg. malejącej kolejności wykonywania}%
\halign to\hsize{\vtop{\hsize.15\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.82\hsize\parindent0pt #\AAA}\cr
Wyrażenie        & Znaczenie \cr \noalign{\HHRule} \cr
\verb+(_r_)+     & \verb+_r_+ (nawiasy służą do grupowania wyrażeń)\cr
\verb+c+         & znak nie będący metaznakiem\cr
\verb+\c+        & wyłącza metaznaczenie znaku \verb+c+ \cr
\verb+^+         & początek napisu \cr
\verb+$+         & koniec napisu \cr
\verb+.+         & dowolny znak \cr
\verb+[ab...]+   & dowolny ze znaków \verb+a+, \verb+b+... Można stosować
                   skrócony zapis \verb+[a-z]+ oznaczający
                   znak z~zakresu \verb+a+--\verb+z+ \cr
\verb+[^ab...]+  & dowolny znak oprócz \verb+a+, \verb+b+...
                   Zapis skrócony: \verb+[^a-z]+\cr
\verb+\y+        & \gawkextension granica słowa\endgawkextension \cr
\verb+\B+        & \gawkextension wnętrze słowa\endgawkextension \cr
\verb+\<+        & \gawkextension początek słowa\endgawkextension \cr
\verb+\>+        & \gawkextension koniec słowa\endgawkextension \cr
\verb+\w+        & \gawkextension znak alfanumeryczny\endgawkextension \cr
\verb+\W+        & \gawkextension wszystkie znaki za wyjątkiem alfanumerycznych\endgawkextension \cr
\verb+\`+        & \gawkextension początek bufora (napisu)\endgawkextension \cr
\verb+\'+        & \gawkextension koniec bufora (napisu)\endgawkextension \cr
\verb+_r_*+      & zero lub więcej napisów pasujących do \verb+_r_+\cr
\verb@_r_+@      & jeden lub więcej napisów pasujących do \verb+_r_+\cr
\verb+_r_?+      & zero lub jeden napis pasujący do \verb+_r_+\cr
\verb+r{_n_,_m_}+ & \gawkextension od \verb+_n_+ do \verb+_m_+ powtórzeń \verb+_r_+\endgawkextension \cr
\verb+_r1_|_r2_+ & \verb+_r1_+ lub \verb+_r2_+ (\verb+_r_+ oznacza wyrażenie regularne)
\cr }
\endsummary

%
\section{Rekordy}
\noindent Domyślnie rekordy są odzielone znakami nowej linii.  Wartość
zmiennej \verb+RS+ przechowuje napis używany do oddzielania
poszczególnych rekordów. Jeżeli \verb+RS+ jest pojedynczym znakiem
wtedy ten znak oddziela rekordy; w~przeciwnym wypadku \verb+RS+ jest
traktowany jak wyrażenie regularne.  Jeżeli \verb+RS=""+ (napis pusty)
wtedy, separatorami rekordów są puste linie (jedna lub więcej). Jeżeli
\verb+RS+ jest napisem pustym, to znaki końca linii zawsze są
traktowane jako separatory pól bez względu na to jaka jest wartość
zmiennej~\verb+FS+.

Jeżeli \verb+RS+ jest wyrażeniem regularnym, to zmienna \verb+RT+
zawiera napis będący separatorem bieżącego rekordu 
od rekordu następnego.

%
\section{Pola}
\noindent
Po przeczytaniu każdego rekordu AWK dzieli go na \stress{pola\/}
wykorzystując jako separatory wartość zmiennej \verb+FS+.  Jeżeli
\verb+FS+ jest pojedynczym znakiem, to ten znak jest separatorem pól;
w~przeciwnym wypadku \verb+FS+ jest traktowany jak wyrażenie
regularne. W~specjalnym przypadku, gdy \verb+FS=" "+ (dokładnie jedna
spacja) to separatorem pól jest dowolnej długości ciąg odstępów
(tj.~spacji, znaków tabulacji lub nowego wiersza).  Wiodące i~końcowe
(\stress{trailing\/}) odstępy są pomijane. Na sposób w~jaki rekordy są
dzielone na pola ma wpływ wartość zmiennej \verb+IGNORECASE+,
w~przypadku gdy \verb+FS+ jest wyrażeniem regularnym.

Do każdego pola można się odwołać za pomocą zmiennych \verb+$1+
(pierwsze pole), \verb+$2+ (drugie pole), \verb+$3+ itd. Zmienna
\verb+$0+ oznacza cały rekord.  Polom mogą być także przypisane nowe
wartości.  Zmiennej \verb+NF+ jest przypisywana liczba pól w~bieżącym
rekordzie.

Odwołanie się do pól nie istniejących (o~numerze większym od
\verb+NF+) powoduje utworzenie napisów pustych. Przypisanie wartości
polom nie istniejącym powoduje także odpowiednie zwiększenie wartości
zmiennej \verb+NF+, ewentualne utworzenie pól ,,pośrednich'' (tj. pól 
od numeru \verb@NF@~+1 do przedostatniego) o~wartości równej napisowi
pustemu oraz uaktualnienie zmiennej~\verb@$0@.  
Odwołanie się do pola
o~numerze ujemnym powoduje błąd.  Zmniejszenie wartości
\verb+NF+ powoduje utratę ,,nadmiarowych'' pól.

\section {Wzorce}
\noindent
Wzorce mogą mieć postać: \par
\verb+BEGIN+ \qquad
\verb+END+ \qquad
\verb+_wyrażenie_+ \qquad
\verb+_wzorzec1_, _wzorzec2_+ \par
\noindent
Wzorce \verb+BEGIN+ i~\verb+END+ są wzorcami specjalnymi, wykonywanymi
--~odpowiednio --~przed i~po przeczytaniu strumienia danych
wejściowych. Wzorce \verb+BEGIN+ i~\verb+END+ \stress{muszą\/} posiadać
procedury. Oba wzorce mogą występować wielokrotnie; są wtedy
łączone i~wykonywane tak jakby tworzyły jedną dużą procedurę. Mogą
występować w~dowolnym miejscu programu, włączając 
w~to różne pliki źródłowe.

Wyrażenie we wzorcu może być dowolnym wyrażeniem zgodnie z~opisem
w~punkcie~{\sf Wyrażenia}.

Konstrukcję \verb+_wzorzec1_,_wzorzec2_+ nazywamy wzorcem
z~przecinkiem.  Do tego wzorca pasują wszystkie rekordy pasujące od
\verb+_wzorzec1_+ do rekordu pasującego do \verb+_wzorzec2_+, łącznie
z~tymi rekordami. W~roli \verb+_wzorzec1_+/\verb+_wzorzec2_+ mogą
wystąpić tylko wyrażenia: wzorce \verb+BEGIN+ i~\verb+END+ oraz
wzorzec z~przecinkiem są niedozwolone.

%
\section {Symbole sterujące }
\noindent
Wewnątrz stałych napisowych (\verb+"..."+) oraz ,,literałów regularnych''
(\verb+/.../+) można wykorzystać symbole sterujące
do wstawienia znaków specjalnych.
\par
\Ysummary{Symbole sterujące }%
\halign to\hsize{%
   \vtop{\hsize.10\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.32\hsize\parindent0pt #\AAA}&
   \vtop{\hsize.11\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.41\hsize\parindent0pt #\AAA}\cr
Symbol   & Znaczenie      & Symbol   & Znaczenie \cr \noalign{\HHRule} \cr
\verb+\a+& dzwonek        & \verb+\r+& powrót karetki\cr
\verb+\b+& znak cofnięcia & \verb+\t+& tabulacja \cr
\verb+\f+& koniec strony  & \verb+\v+& tabulator pionowy \cr
\verb+\n+& koniec wiersza & \verb+\\+& w~tył-ciach (\verb+\+) \cr
\verb+\_ddd_+& oktalnie \verb+_ddd_+ 
             & \verb+\x_hh_+ & heksadecymalnie \verb+_hh_+ \cr
\verb+\"+& literalnie \verb+"+ & \verb+\/+& ciach (\verb+/+) \cr
}
\endsummary

\section{Wyrażenia}
\noindent
Wyrażenia arytmetyczne mogą być wykorzystane jako wzorce oraz jako
warunki poleceń sterujących.

\Ysummary{Wyrażenia}
\halign to\hsize{\vtop{\hsize.22\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.75\hsize\parindent0pt #\AAA}\cr
\verb+()+ & grupowanie \cr
\verb+$+  & odwołanie do pola \cr
\verb@++@ \verb@--@ & inkrementacja, dekrementacja \cr
\verb@^@ \verb@**@  & potęgowanie \cr
\verb@+@ \verb@-@ \verb@!@ & jednoargumentowe operatory \verb@+@ \verb@-@, logiczna negacja \cr
\verb@*@ \verb@/@ \verb@%@ & mnożenie, dzielenie i~modulo \cr
\verb@+@ \verb@-@ & dodawanie i~odejmowanie \cr
\verb@_odstęp_@ & łączenie napisów \cr
\verb@<@ \verb@>@ & mniejszy, większy \cr
\verb@<=@ \verb@>=@ & mniejszy-równy, większy-równy \cr
\verb@!=@ \verb@==@ & różny, równy \cr
\verb@~@ \verb@!~@ & operator pasowania, operator niepasowania \cr
\verb@in@ & należenie do tablicy \cr
\verb@&&@ & iloczyn logiczny  \cr
\verb@||@ & suma logiczna  \cr
\verb@?:@ & wyrażenie warunkowe \cr
\verb@=@ \verb@+=@ \verb@-=@ \verb@*=@ \verb@/=@ \verb@%=@ \verb@^=@ \verb@**=@ &  przypisanie \cr
} \endsummary

\section {Funkcje wbudowane }
\removelastskip
\Ysummary{Funkcje arytmetyczne}% 
\halign to\hsize{\vtop{\hsize.18\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.79\hsize\parindent0pt #\AAA}\cr
     Funkcja      & Wartość funkcji \cr \noalign{\HHRule}
\verb+atan2(y,x)+ & arcus tangens z $y/x$ w~zakresia $-\pi$ do $\pi$ \cr
    \verb+cos(x)+ & cosinus z $x$, $x$ w radianach \cr
    \verb+sin(x)+ & sinus z $x$, $x$ w radianach \cr
    \verb+exp(x)+ & eksponent, czyli funkcja wykładnicza $e^x$ \cr
    \verb+int(x)+ & część całkowita z $x$ \cr
    \verb+log(x)+ & logarytm z $x$ przy podstawie $e$ \cr
  \verb+sqrt(x)+  & pierwiastek kwadratowy z $x$ \cr
   \verb+rand()+  & przypadkowa liczba z przedziału $\langle0,1)$ \cr
\verb+srand(x)+   & wartość początkowa generatora liczb pseudolosowych \cr
}
\endsummary
%
\medskip
%
\Xsummary{Funkcje napisowe}%
\\ \verb+gsub(_r_,_s_,_t_)+ \&
Zamienia wyrażenie regularne \verb+_r_+ na napis 
\verb+_s_+ w~napisie \verb+_t_+. Zwraca liczbę zamian. 
Wywołana z~dwoma parametrami zamienia w~\verb+$0+. 
\cr
\gawkextension
\\ \verb+gensub(_r_,_s_,_a_,_t_)+  \&
Uogólniona funkcja \verb+gsub+.
Zwraca zmieniony napis (nie modyfikuje oryginalnego napisu \verb+_t_+!).
Zamienia wyrażenie regularne \verb+_r_+ \stress{w~oparciu o~napis} \verb+_s_+, 
w~napisie \verb+_t_+ (jeżeli nie ma \verb+_t_+ zamienia w~\verb+$0+).
Argument \verb+_a_+ określa, \stress{który\/} z~kolei podnapis pasujący do
wyrażenia \verb+_r_+ ma być wymieniony. Jeżeli \verb+_a_+ jest napisem 
rozpoczynającym się od \verb+"g"+ (lub \verb+"G"+) to wymieniane są 
\stress{wszystkie\/} napisy pasujące do \verb+_r_+.
\endgraf 
\noindent
Funkcja \verb+gensub+ umożliwia wstawienie fragmentów wyrażenia regularnego 
w~napisie~\verb+_s_+.
Jeżeli wyrażenie \verb+_r_+ podzielimy za pomocą nawiasów, \verb+(+ i~\verb+)+
na części składowe, to te składowe mogą później pojawić się w~napisie
\verb+_s_+. Oznaczamy je jako \verb+\_n_+, 
gdzie \verb+_n_+ jest cyfrą od 1~do~9.
Znaczenie tego jest takie, że napis pasujący do \verb+_n_+-tej
składowej jest kopiowany, z~tekstu \verb+_t_+ do tekstu zwracanego przez
funkcję. W~efekcie możliwe są wszelkiego rodzaju 
\stress{zmiany kontekstowe}.
Symbol \verb+\0+ oznacza całe wyrażenie regularne \verb+_r_+.
\endgawkextension
\cr
\\ \verb+index(_s_,_t_)+\&
Zwraca numer pierwszego znaku napisu \verb+_t_+ w~napisie \verb+_s_+. 
Jeżeli \verb+_s_+ nie zawiera \verb+_t_+ zwraca \verb+0+.
\cr
\\ \verb+length(_s_)+ \&
Podaje długość napisu \verb+_s_+ lub długość \verb+$0+ (jeżeli nie
podano \verb+s+).
\cr
\\ \verb+match(_s_,_r_)+\&
Jeżeli \verb+_s_+ zawiera napis pasujący do \verb+_r_+, 
to zwraca numer pierwszego znaku tego napisu; 
w~przeciwnym razie zwraca~\verb+0+. 
Przypisuje wartości zmiennym \verb+RSTART+ i~\verb+RLENGTH+.
\verb+RSTART+ jest równe wartości zwracanej przez funkcję, \verb+RLENGTH+ 
jest równe długości napisu pasującego do \verb+_r_+.
\cr
\\ \verb+split(_s_,_a_,_fs_)+\&
Z~napisu \verb+_s_+ tworzy tablicę napisów \verb+_a_+, wykorzystując
do separacji wyrażenie regularne \verb+_r_+.  Jeżeli \verb+split+ jest 
wywołane tylko z~dwoma parametrami to separatorem jest
wartość zmiennej \verb+FS+.
\cr
\\ \verb+sprintf(_format_, _lista-wyrażeń_)+\&
Zwraca napis, sformatowany według specyfikacji \verb+_format_+.
\cr
\\ \verb+sub(_r_,_s_,_t_)+\&
Jak \verb+sub+, ale zamienia tylko pierwszy napis pasujący
do \verb+_r_+ na \verb+_s_+.
\cr
\\ \verb+substr(_s_,_p_,_n_)+\&
Zwraca napis wycięty z~\verb+_s_+ począwszy od pozycji \verb+_p_+ o~długości
\verb+_n_+ znaków (lub do końca \verb+_s_+, jeżeli argument 
\verb+_n_+ jest pominięty).
\cr
\gawkextension
\\ \verb+tolower(_s_)+\&
Zwraca napis, w~którym duże litery zostały zamienione na małe.
\cr
\\ \verb+toupper(_s_)+\&
Zwraca napis, w~którym małe litery zostały zamienione na duże.
\endgawkextension
\cr
\endsummary
\medskip

%
\section{Instrukcje sterujące}
%\Xsummary{Instrukcje sterujące}
\vskip-\baselineskip \Xsummary{}
\\ \verb+{ _instrukcje_ }+ \& grupowanie instrukcji. \cr
\\ \verb+if (_w_) _instrukcja_+ \& jeśli wyrażenie 
   \verb+_w_+ jest prawdziwe, wykonaj \verb+_instrukcję_+. \cr
\\ \verb+if (_w_) _instrukcja1_ else _instrukcja2_+ \& wykonaj 
   \verb+_instrukcję1_+ jeśli wyrażenie \verb+_w_+ jest prawdziwe, 
   w~wypadku  przeciwnym \verb+_instrukcję2_+. \cr
\\ \verb+while (_w_) _instrukcja_+ \& jeśli wyrażenie \verb+_w_+ 
   jest prawdziwe, wykonaj \verb+_instrukcję_+ i~powtórz. \cr
\\ \verb+for (_w1_; _w2_; _w3_) _instrukcja_+ \& równoważne 
   instrukcji: \verb+_w1_; while (_w2_) {_instrukcja_; _w3_}+. \cr
\\ \verb+for (_zmienna_ in _tablica_) _instrukcja_+ \& 
   \verb+_instrukcja_+ jest wykonywana dla \verb+_zmiennej_+ 
   przyjmującej kolejno wartości indeksów z~\verb+_tablicy_+. \cr
\\ \verb+do _instrukcja_ while (_w_)+ \& wykonaj
   \verb+_instrukcję_+ jeśli wyrażenie \verb+_w_+ 
   jest prawdziwe i~powtórz. \cr
\\ \verb+break+ \& natychmiastowe wyjście 
   z~pętli \verb+while+, \verb+for+, \verb+do+. \cr
\\ \verb+continue+ \& kontynuacja iteracji w~pętlach 
   \verb+while+, \verb+for+, \verb+do+. \cr
\\ \verb+next+ \& rozpoczęcie następnej 
   iteracji głównej pętli wejściowej. \cr
\\ \verb+exit _wyrażenie_+ \& sterowanie jest przekazywane 
   bezpośrednio do akcji \verb+END+. Jeśli
polecenia \verb+exit+ użyto w~akcji \verb+END+, program kończy
działanie. Opcjonalne \verb+_wyrażenie_+ zwracane jest
jako status programu.\cr
\gawkextension
\\ \verb+nextfile+ \& zakończenie czytania bieżącego pliku i~przejście do
  następnego z~podanych w~linii poleceń, 
  lub (dla ostatniego) przejście do wzorca \verb+END+.
  Wykonanie \verb+nextfile+ zmienia wartość zmiennej 
  \verb+FILENAME+, przypisuje \verb+FNR+ wartość~1 oraz
  zwiększa o~1 wartość \verb+ARGIND+. 
\endgawkextension 
\cr
\endsummary

%
\medskip
\section{Zmienne wbudowane}
%\Ysummary{Zmienne wbudowane}
\vskip-\baselineskip\Ysummary{}
\halign to\hsize{\vtop{\hsize.20\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.77\hsize\parindent0pt #\AAA}\cr
Zmienna            & Opis znaczenia \cr \noalign{\HHRule}
\verb+ARGC+        & liczba argumentów wywołania programu. \cr
\verb+ARGV+        & tablica argumentów wywołania programu, indeksowana od \verb+0+ do \verb+ARGC+~-1. \cr
\verb+ARGIND+      & \gawkextension index w~{\tt ARGV} odpowiadający 
                     bieżącemu plikowi\endgawkextension. \cr
\verb+CONVFMT+     & format konwersji napisów do liczb, domyślnie \verb+%.6g+. \cr
\verb+ENVIRON+     & \gawkextension tablica zmiennych 
                     środowiskowych\endgawkextension. \cr
\verb+ERRNO+       & \gawkextension napis z~systemowym opisem błędu, 
                      w~przypadku błędu wykonania
                      polecenia \verb+getline+ lub 
                      \verb+close+\endgawkextension. \cr
\verb+FIELDWIDTHS+ & \gawkextension rozdzielona spacjami lista długości 
                     pól. Przydatne w~przypadku pól o~stałych 
                     długościach.\endgawkextension \cr
\verb+FILENAME+    & nazwa bieżącego pliku wejściowego. We wzorcu
                     \verb+BEGIN+ zmienna \verb+FILENAME+ nie jest 
                     zdefiniowana. \cr
\verb+FNR+         & numer bieżącego rekordu w~bieżącym pliku. \cr
\verb+FS+          & separator pól, zobacz~{\sf Pola}. \cr
\verb+IGNORECASE+  & \gawkextension jeżeli niezerowa, 
                     to wszystkie wyrażenia regularne 
                     i~funkcje napisowe nie rozróżniają 
                     wysokości liter \endgawkextension. \cr
\verb+NF+          & liczba pól w~bieżącym rekordzie. \cr
\verb+NR+          & liczba przeczytanych rekordów. \cr
\verb+OFMT+        & specyfikacja formatu wydruku dla argumentów 
                     numerycznych polecenia 
                    \verb+print+ (domyślnie \verb+%.6g+). \cr
\verb+OFS+         & separator pól na wyjściu; domyślnie spacja. \cr
\verb+ORS+         & separator rekordów na wyjściu; 
                     domyślnie znak nowej linii. \cr
\verb+RLENGTH+     & por. opis funkcji \verb+match+ w~punkcie {\sf Funkcje}. \cr
\verb+RS+          & separator rekordów; domyślnie znak nowej linii. \cr
\verb+RT+          & \gawkextension napis pasujący do wyrażenia {\tt RS}\endgawkextension. \cr
\verb+RSTART+      & por. opis funkcji \verb+match+ w~punkcie {\sf Funkcje}. \cr
\verb+SUBSEP+      & separator indeksów tablic, domyślnie znak 
                     o~kodzie \verb+\034+, por.~{\sf Tablice asocjacyjne}. \cr
}
\endsummary%

%%
\section {Tablice asocjacyjne}
\noindent
Indeks tablicy to wyrażenie pomiędzy parą nawiasów kwadratowych. Jeżeli
wyrażeniem jest lista, to subskrypt jest napisem powstałym
z~połączenia wartości składowych oddzielonych wartością zmiennej
\verb+SUBSEP+. W~ten sposób symulowane są tablice wielowymiarowe.
Przykładowo:
\par
\verb+i="A"; j="B"; k="C"+\par
\verb+x[i, j, k] = "A qq!\n"+\par
\noindent
przypisuje napis \verb+"A qq!\n"+ elementowi tablicy \verb+x+, któremu
odpowiada indeks \verb+"A\034B\034C"+.

Wyrażenie \verb+_indeks_ in _tablica_+ pozwala ustalić czy określony
\verb+_indeks_+ występuje w~\verb+_tablicy_+.  Jeżeli występuje to
wartością wyrażenia jest~$1$, w~wypadku przeciwnym~$0$.
\par
\verb+if (_indeks_ in _tablica_) print _tablica_[_indeks_]+ \par
\noindent
w~przypadku tablic wielowymiarowych, należy używać
konstrukcji \verb+(i,j) in tablica+.

Do iteracyjnego dostępu do wszystkich elementów tablicy
służy specjalna forma pętli \verb+for+: \par
\verb@for (_zmienna_ in _tablica_) _instrukcja_@
\par \noindent
\verb+_zmienna_+ przyjmuje iteracyjnie wszystkie wartości indeksów
\verb+_tablicy_+.  Kolejność przeglądania tablicy nie jest ustalona
i~jest zależna od konkretnej implementacji \AWK-a. Działanie pętli
jest \stress{nieokreślone} jeżeli wewnątrz pętli zostaną dodane
kolejne elementy do \verb+_tablicy_+.

Element tablicy możemy usunąć za pomocą instrukcji: \par
\verb+delete _tablica_[_indeks_]+ \par

\section {Konwersja i~porównanie }
\noindent
Zmienne i~pola mogą zawierać liczby (zniennoprzecinkowe), napisy
lub oba te typy danych. Interpretacja wartości zmiennej
jest określona przez kontekst. Jeżeli zmienna jest częścią
wyrażenia numerycznego to będzie traktowana jako liczba,
natomiast wykorzystana w~wyrażeniu napisowym --~jako napis. 

Dodanie do zmiennej \verb+0+ wymusza konwersję jej wartości
do liczby; konkatenacja zmiennej z~napisem pustym
powoduje traktowanie zmiennej jako napisu.

Do konwersji napisu do liczby wykorzystywana jest funkcja
\stress{atof(3)}. Liczba do napisu jest konwertowana za pomocą funkcji
\stress{sprintf(3)} wykorzystującej wartość zmiennej \verb+CONVFMT+
jako format konwersji.

Porównanie jest wykonywane następująco: jeżeli obie porównywane
zmienne są numeryczne, są porównywane numerycznie. Jeżeli jedna jest
zmienną numeryczną a druga zawiera ,,napis numeryczny'', wtedy także
porównanie jest numeryczne. W~pozostałych wypadkach, wartość
numeryczna jest konwertowana do napisu, a~następnie wykonywane jest
porównanie napisów. Dwa napisy są porównywane jako napisy. Według
standardu POSIX, dwa ,,napisy numeryczne'' winny być porównywane
numerycznie. Ani \verb+gawk+ ani \verb+mawk+ nie stosuje się do tego
zalecenia.

\iffalse
Napisy, takie jak \verb+"57"+ \stress{nie} są ,,napisami
numerycznymi'' ale stałymi napisowymi. Pojęcie ,,napisy numeryczne''
obejmuje tylko pola, \verb+getline+, FILENAME, elementy tablic
\verb+ARGV+, \verb+ENVIRON+ oraz tablic utworzonych poleceniem
\verb+split+. Generalnie dane wejściowe i~tylko dane wejściowe są
traktowane jako ,,napisy numeryczne''.
\fi

Nie zainicjalizowane zmienne mają wartość numeryczną \verb+0+ lub napisową
\verb+""+ (napis pusty).

\medskip %%
\section{Wejście}
\vskip-\baselineskip \Xsummary{}
%%\Xsummary{Wejście}
\\ \verb+close(_plik_)+ \& zamyka wejściowy plik lub potok. \cr
\\ \verb+getline+ \& wczytuje następny rekord z~bieżącego 
    pliku do \verb+$0+, nadaje wartości \verb+NF+, \verb+NR+, \verb+FNR+. \cr
\\ \verb+getline _z_+ \& wczytuje następny rekord do zmiennej 
   \verb+_z_+, nadaje wartości 
   \verb+NR+, \verb+FNR+. \cr
\\ \verb+getline < _plik_+ \& wczytuje następny rekord z~\verb+_pliku_+, 
   nadaje wartości \verb+$0+, \verb+NF+. \cr
\\ \verb+getline _z_ < _plik_+ \& wczytuje następny rekord z~\verb+_pliku_+
   do~zmiennej~\verb+_z_+. \cr
\\ \verb+_prog_ | getline+ \& wczytuje następny rekord z~potoku 
   generowanego przez \verb+_program_+ do 
   \verb+$0+, nadaje wartości \verb+$0+, \verb+NF+. \cr  
\\ \verb+_prog_ | getline _z_+ \& wczytuje następny rekord z~potoku
   generowanego przez \verb+_program_+ do zmiennej \verb+_z_+. \cr  
\endsummary

\noindent
\verb+getline+ zwraca \verb+0+ na końcu pliku/strumienia danych lub
\verb+-1+ w~przypadku błędu (np. błąd otwarcia pliku).

\medskip %%
\section {Wyjście}
\vskip-\baselineskip \Xsummary{}
\\ \verb+close(_plik_)+ \& zamyka wyjściowy plik lub potok. \cr
\\ \verb+print+ \& drukuje bieżący rekord. Na końcu rekordu wstawiana
    jest wartość zmiennej \verb+ORS+ (domyślnie \verb+\n+). \cr
\\ \verb+print _lista-wyrażeń_+ \& drukuje \verb+_listę-wyrażeń_+ 
   (poszczególne wyrażenia na liście są oddzielone przecinkami). 
   Pomiędzy wyrażenia wstawiana jest wartość zmiennej \verb+OFS+, 
   na końcu listy wartość zmiennej \verb+ORS+. \cr
\\ \verb+printf _format_, _lista-wyrażeń_+ \& drukuje \verb+_listę-wyrażeń_+ 
   według specyfikacji zawartej w~\verb+_formacie_+;
   patrz {\sf Funkcja printf}. \cr
\\ \verb+system(_polecenie_)+ \& wykonuje polecenie systemowe, 
    zwraca status zakończenia. \cr
\begingroup
 \leftskip0pt \parindent0pt
 \par \smallskip
 Przekierowanie strumienia wejścia/wyjścia za pomocą poleceń
 \verb+print+ oraz \verb+printf+:
 \par
\endgroup
\\ \verb+print > _plik_+ \& drukowanie do pliku. 
       Pierwszy zapis powoduje skasowanie poprzedniej zawartości pliku (jeżeli
       istniał) lub utworzenie nowego, kolejne 
       powodują dopisywanie do pliku. \cr
\\ \verb+print >> _plik_+ \& dopisywanie do pliku.  \cr
\\ \verb+print | _prog_+ \& drukowanie w~potoku (\verb+_prog_+ oznacza
   zewnętrzny program\=odbiorcę strumienia danych).  \cr
\endsummary


%%
\section{Funkcja printf}
\noindent
Ogólna postać funkcji \verb+printf+ jest następująca:
\par
\verb+printf (_format_, _arg1_,_arg2_,...)+
\par
\noindent Nawiasy okrągłe są opcjonalne.  Napis lub zmienna napisowa
\verb+_format_+ określa sposób przekształcania i~formatowania
argumentów.  Zawiera on znaki kopiowane przy drukowaniu oraz
specyfikacje przekształceń, z~których każda określa sposób wypisania
kolejnego argumentu.  Specyfikacja ta rozpoczyna się od znaku \verb+%+
a~kończy znakiem określającym typ konwersji.

\Ysummary{Znaki konwersji}
\halign to\hsize{\vtop{\hsize.12\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.85\hsize\parindent0pt #\AAA}\cr
Znak      & Typ przekształcenia \cr%
\noalign{\nobreak\HHRule}
\verb+%c+ & znak ASCII\cr \noalign{\nobreak}
\verb+%d+, \verb+%i+ & liczba całkowita \cr
\verb+%e+ & liczba postaci \verb@[-]d.dddddde[+-]dd@ \cr
\verb+%E+ & jak \verb+e+ ale wykorzystuje \verb+E+ zamiast \verb+e+ \cr
\verb+%f+ & liczba postaci \verb+[-]ddd.dddddd+ \cr
\verb+%g+ & \verb+e+ lub \verb+f+, w~zależności od tego które jest krótsze przy czym nieznaczące zera nie są drukowane\cr
\verb+%G+ & jak \verb+%g+ ale  wykorzystuje \verb+%E+ zamiast \verb+%e+ \cr
\verb+%o+ & liczba ósemkowa bez znaku \cr
\verb+%s+ & napis (ciąg znaków) \cr
\verb+%x+ & liczba szestnastkowa bez znaku \cr 
\verb+%X+ & jak \verb+%x+, ale wykorzystuje \verb+ABCDEF+ do oznaczenia liczb z~przedziału 10--15 \cr 
\verb+%%+ & literalnie znak \verb+%+ \cr
}
\par 
\smallskip
\noindent
Dodatkowo, pomiędzy znakiem \verb+%+ a~znakiem określającym
typ konwersji mogą wystąpić następujące znaki modyfikujące:
\par
\medskip

\hrule \smallskip
\halign to\hsize{\vtop{\hsize.12\hsize\parindent0pt
    #}&\strut\quad\vtop{\hsize.85\hsize\parindent0pt #\AAA}\cr
Znak      & Typ przekształcenia \cr%
\noalign{\nobreak\HHRule}
\verb+-+  & zawartość pola jest justowana do lewego krańca pola \cr %\noalign{\nobreak}
\verb+_spacja_+ & dla wartości numerycznych, wstawia spację przed wartościami dodatnimi oraz minus przed ujemnymi \cr 
\verb+0+  & zawartość pola zamiast spacjami jest wypełniana zerami. Dotyczy także pól nieliczbowych \cr
\verb+_długość_+  & Określenie minimalnego rozmiaru pola w~znakach.
 Argument będzie wpisany do pola o~długości \stress{co
 najmniej} równej \verb+_długość_+. Jeżeli argument składa się
 z~mniejszej liczby znaków, to będzie ono uzupełnione do długości
 minimalnej znakami spacji. Jeżeli specyfikacja długości pola
 rozpoczyna się cyfrą~\verb+0+, to pole będzie wypełniane zerami; \cr 
 \verb+._szer_+ & Znaczenie specyfikacji \verb+_szer_+
 zależy od typu konwersji:
 \begingroup \parindent9pt
 \item{--} maksymalna szerokość pola (\verb+%s+); \endgraf
 \item{--} liczba cyfr po kropce dziesiętnej (\verb+%e+, \verb+%E+, \verb+%f+); 
 \item{--} maksymalna liczba cyfr znaczących po kropce dziesiętnej 
          (\verb+%g+, \verb+%G+); \endgraf
 \item{--} minimalna liczba cyfr (\verb+%d+, \verb+%o+, \verb+%i+, \verb+%u+,
           \verb+%x+, \verb+%X+), w~razie potrzeby uzupełniana nieznaczącymi
           zerami 
 \par \endgroup \cr
}
\vskip-.8\baselineskip
\gawkextension \noindent 
W~wersji \verb+gawk+ wspierana jest dynamiczna specyfikacja ANSI~C
dla \verb+_długość_+ i~\verb+_szer_+. Znak \verb+*+ zamiast
\verb+_długość_+ lub \verb+_szer_+ spowoduje pobranie odpowiedniej
wartości z~listy argumentów.
\par \endgawkextension
\endsummary

\iffalse
\Ysummary{Przykłady specyfikacji}%
 \halign to\hsize {\tabskip0em plus9em#\hss&\quad#\hss&\quad#\hss\cr
Specyfikacja  & Argument & Wynik \cr \noalign{\HHRule}
 \verb+%5d%%+ &   \verb+33.33+ &         \verb+|   33%|+ \cr
    \verb+%c+ &   \verb+33.33+ &         \verb+|!|+ \cr
    \verb+%d+ &   \verb+33.33+ &         \verb+|33|+ \cr
   \verb+%5d+ &   \verb+33.33+ &         \verb+|   33|+ \cr
    \verb+%e+ &  \verb+3.1415+ &   \verb@|3.141500e+000|@ \cr
    \verb+%f+ &  \verb+3.1415+ &        \verb+|3.141500|+ \cr
 \verb+%8.3f+ &  \verb+3.1415+ &       \verb+|   3.141|+ \cr
\verb+%08.3f+ &  \verb+3.1415+ &        \verb+|0003.141|+ \cr
    \verb+%s+ & \verb+Alibaba+ &         \verb+|Alibaba|+ \cr
   \verb+%9s+ & \verb+Alibaba+ &      \verb+|  Alibaba|+ \cr
  \verb+%-9s+ & \verb+Alibaba+ &      \verb+|Alibaba  |+ \cr
 \verb+%-.3s+ & \verb+Alibaba+ &             \verb+|Ali|+ \cr
\verb+%-9.3s+ & \verb+Alibaba+ &      \verb+|Ali      |+ \cr 
}
\endsummary%
\fi

\section {Funkcje }
\noindent
Definicja funkcji może być umieszczona w~dowolnym miejscu programu.
Funkcje są definiowane następująco:
\par
\verb@function _nazwa_ (_lista-argumentów_) { _lista-instrukcji_ }@
\par \noindent
\verb+_lista-argumentów_+ to ciąg oddzielonych przecinkami argumentów
funkcji. Podczas wywołania funkcji, argumentom nadawane są odpowiednie
wartości. Nazwy argumentów są lokalne; są przekazywane przez wartość,
z~wyjątkiem tablic, które są przekazywane ,,przez referencję''.

\verb+_Lista-instrukcji_+ może zawierać instrukcję 
\verb+return _wyrażenie_+.  
Wykonanie \verb+return+ polega na
obliczeniu wartości \verb+_wyrażenia_+ i~przekazaniu tej wartości
w~miejsce wywołania funkcji.  
\verb+_Wyrażenie_+ jest opcjonalne --~jeżeli go nie ma, 
\verb+return+ przekazuje tylko sterowanie do
miejsca wywołania.  
Jeżeli nie ma \verb+return+ sterowanie jest
przekazywane do miejsca wywołania, a~wartość zwracana jest
nieokreślona.

Funkcje mogą być użyte w~dowolnym wyrażeniu w~obu częściach par
\stress{wzorzec-procedura} a~także wewnątrz innych funkcji. 
Dozwolona jest rekursja.

Zmienne lokalne są deklarowane jako ,,nadmiarowe'' parametry formalne
Wywołanie funkcji z~mniejszą od deklarowanej liczbą parametrów jest
poprawne --~wszystkie nadmiarowe parametry przyjmują wartości
zerowe. Zwyczajowo nadmiarowe parametry oddziela się
dodatkowymi znakami odstępu:
\par
\verb@# a, b, c są lokalne@ \par
\verb@function qq (x, y,   a, b, c) { ... } @ \par
\verb@/abc/{...; qq(1,2); ... }@ \par

\noindent Przy wywołaniu funkcji \stress{nie można} umieszczać odstępu
pomiędzy jej nazwą a~rozpoczynającym listę argumentów
nawiasem~\verb+(+.  Wymóg ten, który \stress{nie\/} dotyczy
\stress{funkcji wbudowanych} jest spowodowany uniknięciem
dwuznaczności związanej z~operatorem konkatenacji.

\section {Zmienne środowiskowe}
\gawkextension\noindent
Zmienna \verb+AWKPATH+ określa katalogi, w~których będą szukane pliki
podane za pomocą opcji \verb+-f+. Domyślną wartością tej zmiennej jest
\verb+".:/usr/local/share/awk"+.  Jeżeli nazwa podana jako argument
opcji \verb+-f+ zawiera znak \verb+/+, żadne katalogi nie są
przeszukiwane. \par
\endgawkextension

\section {Zasoby internetowe}
\par \noindent
\verb+ftp://ftp.gnu.ai.mit.edu/pub/gnu/gawk-3*.tar.gz+. 
\par \noindent
\verb+ftp://ftp.whidbey.net/pub/brennan/mawk*.tar.gz+.

\bigskip
%\vskip2pt
\par \hrule \vskip2.0pt
\line{\copyrfont Opracowanie: Tomasz Przechlewski \hss}
\COPYR
\eject
\bye
% Local Variables:
% compile-command: "mex awkrefcard-pl"
% mode: plain-TeX
% End:

