Provided by: manpages-hu_20010119-5_all bug

NÉV

       gawk - mintakereső és -feldolgozó nyelv

ÁTTEKINTÉS

       gawk [ POSIX vagy GNU stílusú opciók ] -f program-file [ -- ] file ...
       gawk [ POSIX vagy GNU stílusú opciók ] [ -- ] file ...

LEÍRÁS

       A  gawk az AWK programnyelv GNU Project általi megvalósítása.  Alkalmazkodik a nyelv POSIX
       1003.2 Command Language And Utilities Standard-beli definíciójához. Másfelől ez  a  verzió
       az  -  Aho,  Kernighan  és  Weinberger  által  írt - The AWK Programming Language leírásán
       alapul; a UNIX awk System V Release  4  verziójában  található  további  szolgáltatásokkal
       kiegészítve.  A  gawk  újabb  keletű  Bell  Labs  bővítésekkel  és  néhány  GNU-specifikus
       bővítéssel is szolgál.

       A parancssor magának a gawk -nak adandó paraméterekből, az AWK program szövegéből (ha  nem
       a  -f  vagy --file opciók segítségével adjuk meg), valamint - később az ARGC és ARGV előre
       definiált AWK változókkal elérhető - értékekből áll.

OPCIÓFORMÁTUM

       A gawk opciók lehetnek a POSIX-féle hagyományos egybetűs opciók, vagy a GNU stílusú hosszú
       opciók.  A  POSIX stílusú opciók szimpla kötőjellel (``-''), míg a GNU hosszú opciói dupla
       kötőjellel (``--'') kezdődnek.  Egyaránt GNU stílusú hosszú  opciókkal  vannak  ellátva  a
       GNU-  specifikus  és  a POSIX-ban előírt szolgáltatások. Az AWK nyelv egyéb megvalósításai
       valószínűleg csak a hagyományos egybetűs opciókat fogadják el.

       Követve a POSIX szabványt a gawk specifikus opciókat  a  -W  paraméterrel  lehet  megadni.
       Megadhatunk  több  -W  paramétert,  vagy  egyet  több  argumentummal.  Utóbbi  esetben  az
       argumentumokat vesszővel kell elválasztani; vagy whitespace-szel, és zárójelek közé tenni.
       A  kis-/nagybetűk egyenértékűek a -W opció argumentumaiban. Mindegyik -W opciónak megvan a
       maga GNU stílusú párja (ld. lejjebb). A GNU stílusú opciók argumentumait vagy az  opcióval
       =  jellel  összekötve  (közbülső  space-ek  nélkül),  vagy  mint  a  következő parancssori
       paramétert kell megadni. A hosszú opciók rövidíthetők mindaddig, amíg a  rövidítés  egyedi
       marad.

OPCIÓK

       A gawk a következő opciókat fogadja el:

       -FS fs
       --field-separator fs
              Bemeneti mezőelválasztóként fs értékét használja (alapértelmezés az előre definiált
              FS változó értéke).

       -v var=val
       --assign var=val
              A var változóhoz rendeli a val értéket mielőtt a program végrehajtása  megkezdődik.
              Az ilyen változóértékek elérhetők az AWK program BEGIN blokkjában.

       -f program-file
       --file program-file
              Az AWK programot a program-file forrásfile-ból, olvassa első parancssori argumentum
              helyett. Több -f (or --file) opció használható.

       -mf NNN
       -mr NNN
              Különféle memóriakorlátokat állít be NNN értékre. Az  f  jelző  a  mezők  maximális
              számát,  az  r jelző a rekordok maximális számát állítja be. Ez a két jelző és a -m
              opció az AT&T Bell Labs research UNIX awk verziójából származik.  A gawk  figyelmen
              kívül hagyja, mivel a gawk -nak nincsenek elődefiniált korlátai.

       -W traditional
       -W compat
       --traditional
       --compat
              Futás  kompatíbilis  módban.  Amikor  kompatíbilis módban fut, a gawk UNIX awk -kal
              megegyezően viselkedik,  azaz  nem  ismeri  fel  e  GNU-specifikus  bővítéseket.  A
              --traditional  formát  részesítjük előnyban a többivel szemben. További információ:
              lásd lejjebb a GNU BŐVÍTÉSEK részt.

       -W copyleft
       -W copyright
       --copyleft
       --copyright
              Kinyomtatja a szabványos kimenetre a GNU szerzői jogi információ  rövid  verzióját,
              és sikeresen befejezi a futást.

       -W help
       -W usage
       --help
       --usage
              A   rendelkezésre  álló  opciók  egy  viszonylag  rövid   összegzését  nyomtatja  a
              szabványos kimenetre. (A GNU Kódolási Szabályok -nak  megfelelően  ezek  az  opciók
              azonnali, sikeres kilépést eredményeznek.)

       -W lint
       --lint Figyelmeztet   a   bizonytalan   vagy  a  más  AWK  megvalósításra  át  nem  vihető
              szerkezetekre.

       -W posix
       --posix
              Bekapcsolja a kompatíbilis módot az alábbi megkötésekkel:

              • a \x escape szekvenciákat nem ismeri fel.

              • csak a space és a tab működik mezőelválasztóként, amikor FS értéke  space-re  van
                beállítva, az újsor nem.

              • A function kulcsszó func szinonímáját nem ismeri fel.

              • A ** és a **= operátor nem használható a ^ és a ^= helyén.

              • Az fflush() függvény nem elérhető.

       -W re-interval
       --re-interval
              Engedélyezi   az   intervallum  kifejezések  használatát  a  reguláris  kifejezések
              illesztésénél  (lásd  alább:  RegulárisKifejezések   ).   Intervallum   kifejezések
              eredetileg  nem  voltak  használhatók  az AWK nyelvben.  A POSIX szabvány adta őket
              hozzá, hogy az awk -ot és az egrep  -et  konzisztenssé  tegyék  egymással.  Azonban
              használatuk  valószínűleg tönkreteszi a régi AWK programokat, így a gawk csak akkor
              nyújtja azokat, ha ezzel az opcióval kérik, vagy ha a --posix meg van adva.

       -W source program-text
       --source program-text
              A program-text -et AWK forráskódként  használja.  Ez  az  opció  lehetővé  teszi  a
              könyvtári  függvények  (  -f  és --file ) könnyű keverését a parancssorban megadott
              forráskóddal.  Ez  elsősorban  shell  szkriptekben  használt  nagy  AWK   programok
              közvetítő közegének van szánva.

       -W version
       --version
              Kiírja az aktuális gawk program verzióját a szabványos kimenetre. Ez akkor hasznos,
              ha tudni szeretnénk, hogy a rendszeren lévő program a legújabb-e,  tekintetbe  véve
              mindent, amit a Szabad Software Alapítvány kiad. Szintén hasznos hibajelentésekhez.
              (A GNU Kódolási  Szabályok  -nak  megfelelően  ezek  az  opciók  azonnali,  sikeres
              kilépést eredményeznek.)

       --     Az opciók végét jelzi. Hasznos, ha engedélyezni akarjuk, hogy a további, magának az
              AWK programnak átadandó argumentumok ``-''  jellel  kezdődjenek.   Ez  főként  a  -
              legtöbb  POSIX  program  által  alkalmazott - argumentum elemzési konvencióval való
              egyezőség miatt született.

       Kompatíbilis módban a program minden  egyéb  opciót  illegálisként  jelöl  meg,  egyébként
       figyelmen  kívül  hagyja  azokat.  Rendes  működéskor,  mindaddig, amíg szöveget talál, az
       ismeretlen opciókat feldolgozásra átadja az AWK programnak az ARGV tömbben.  Ez  különösen
       az AWK programok ``#!'' mechanizmussal történő futtatásakor hasznos.

AZ AWK PROGRAM VÉGREHAJTÁSA

       Egy AWK program minta-tevékenység utasítások és opcionális függvénydefiníciók sorozata.

              minta  { tevékenység utasítások }
              function név(paraméter lista) { utasítások }

       A  gawk először beolvassa a programforrást a programfile -(ok)ból (ha meg van adva ilyen),
       a --source argumentumából, vagy a parancssor első, nem-opció argumentumából.  A  -f  és  a
       --source  opciók  többször  használhatók a parancssorban. A gawk ilyenkor úgy olvassa be a
       program szövegét, mintha  minden  programfile  és  parancssori  forrásszöveg  össze  volna
       kapcsolva  (konkatenálva).  Ez  jól használható AWK függvénykönyvtárak kialakításához. Így
       nincs szükség a függvények  befoglalására  minden  olyan  új  programba,  amely  használja
       azokat.    Ez  azt  is  lehetővé  teszi,  hogy  a  könyvtári  függvényeket  a  parancssori
       programokkal keverjük.

       Az AWKPATH környezeti változó előírja a -f opcióval megnevezett fájlok keresési útvonalát.
       Ha    ez    a    változó    nem    létezik,    az    alapértelmezett   keresési   útvonal:
       ".:/usr/local/share/awk".  (A tényleges könyvtár  aszerint  változhat,  hogy  a  gawk  -ot
       hogyan  fordították  és installálták.) Amennyiben egy, a -f opcióval átadott fájlnév ``/''
       karaktert tartalmaz, nem hajtódik végre útvonal-keresés.

       A gawk a következő forgatókönyv szeint  hajtja  végre  a  programokat.  Először  végrehajt
       minden,  a  -v  opcióval  előírt  változó-értékadást.  Ezután egy belső formába fordítja a
       programot, végrehajtja a BEGIN blokk(ok)ban  levő  kódot  (ha  van  ilyen),  majd  beolvas
       minden, az ARGV tömbben megadott fájlt. Ha nincs file megnevezve a parancssorban, a gawk a
       szabványos bemenetet olvassa.

       Ha  egy,  a  parancssorban  megadott  fájlnév  var=val   formájú,   akkor   ezt   a   gawk
       változó-értékadásként  kezeli;  a var változó megkapja a val értéket. (Ez azután történik,
       hogy minden BEGIN block lefutott.) A parancssori értékadás ott a leghasznosabb, ahol olyan
       változók  értékeit  adjuk  meg dinamikusan, amelyek azt írják elő, hogy a bemenetet milyen
       módon kell mezőkre és rekordokra bontani. Ez állapot figyelésre is alkalmas, ha több futás
       is szükséges egyetlen adatfile-on.

       Ha az ARGV egy bizonyos eleme üres értékű (""), a gawk átugorja azt.

       A  gawk  ellenőrzi a bemenet minden rekordját, hogy eldöntse, illeszkedik-e az AWK program
       bármely mintájára.  Minden olyan mintához rendelt tevékenység végrehajtódik, amely mintára
       a  rekord  illeszkedik. A minták a programbeli előfordulás sorrendjében kerülnek vizsgálat
       alá.

       Végül, miután minden bemenetnek a végére ért, a gawk végrehajtja az END blokk(ok)ban  lévő
       kódot (ha van ilyen).

VÁLTOZÓK, REKORDOK ÉS MEZŐK

       Az  AWK változók dinamikusak; első használatukkor jönnek létre. Értékük vagy lebegőpontos,
       vagy karakterlánc, vagy mindkettő, a használatuk módjától függően. Az AWK-ban léteznek még
       egydimenziós  tömbök;  a  többdimenziósak  szimulálhatók.  Számos elődefiniált változó kap
       értéket egy program futása alatt; ezek leírása és összegzése  alább,  a  szükséges  helyen
       történik.

   Rekordok
       Rendszerint   a   rekordok   újsor   karakterekkel   vannak   elválasztva.   Megadható   a
       rekordelválasztás módja az RS nevű beépített változó értékének  hozzárendelésével.  Ha  RS
       egyetlen  karakter,  ez  a  karakter  lesz  a  rekordelválasztó.  Egyébként  RS  reguláris
       kifejezés. Az erre a reguláris kifejezésre illeszkedő szöveg a  rekordelválasztó.  Azonban
       kompatíbilis  módban  csak  karakterlánc-értékének  első  karaktere  lesz  felhasználva  a
       rekordok szétválasztására.  Ha RS üres karakterláncra van beállítva,  akkor  a  rekordokat
       üres  sorok  választják  el.   Ilyenkor  az  újsor karakter mezőelválasztóként viselkedik,
       bármilyen értékű is FS.

   Mezők
       Amint beolvassa az egyes rekordokat, a gawk mezők -re bontja azokat, az FS változó értékét
       használva  mezőelválasztóként.  Ha  FS  egyetlan  karakter,  ez  a karakter választja el a
       mezőket. Ha FS üres karakterlánc, akkor minden egyes karakter külön mező lesz. Egyébként a
       program  FS  -t,  mint  reguláris  kifejezést kezeli. Abban a speciális esetben, amikor FS
       egyetlen space, a mezőket space és/vagy tab és/vagy újsor karakterek  választják  el.  (De
       lásd  lejjebb  a  --posix  opció  tárgyalását).  Fontos,  hogy  az IGNORECASE értéke (lásd
       lejjebb) szintén befolyásolja, hogy  a  mezők  miként  választódnak  szét,  amikor  az  FS
       reguláris  kifejezés;  és  hogy  hogyan  szeparálódnak  a rekordok, amikor az RS reguláris
       kifejezés.

       Ha a FIELDWIDTHS változó értékeként space-ekkel elválasztott számlista van megadva, a gawk
       fix  szélességű mezőket vár, és a rekordot az adott szélességekre darabolja. Az FS értékét
       figyelmen kívül hagyja.  FS-nek új értéket adva a FIELDWIDTHS  használata  megszüntethető,
       és visszaállítható az alapértelmezett működés.

       A  bemeneti rekord minden mezőjére pozíciója alapján hivatkozhatunk ( $1, $2, stb.)  $0 az
       egész rekord. A mező értéke meg is adható. A mezőhivatkozásnak nem  szükséges  konstansnak
       lennie:

              n = 5
              print $n

       kiírja  a  bemeneti rekord ötödik mezőjét. Az NF változó a bemeneti rekord mezőinek számát
       tartalmazza.

       A nemlétező  mezőkre  történő  hivatkozások  (azaz  $NF-nél  nagyobb  indexű  mezők)  üres
       karakterláncot  eredményeznek. Azonban a nemlétező mezőnek történő értékadás (pl.  $(NF+2)
       = 5) megnöveli NF értékét, minden közbeeső mezőt üres karakterlánc-értékkel hoz létre,  és
       $0  értékét  újra  kiértékelteti  úgy,  hogy  a  mezőelválasztó OFS értéke lesz. A negatív
       mezőhivatkozások fatális hibát  okoznak.   NF  dekrementálása  az  új  érték  utáni  mezők
       értékének  elvesztésével  jár,  valamint $0 értékének újraszámítását okozza, OFS értékének
       megfelelő mezőelválasztással.

   Beépített változók
       A gawk beépített változói:

       ARGC        A  parancssori  argumentumok  száma  (nem  tartalmazza  a  gawk   -nak   szóló
                   argumentumokat, vagy a program forráskódját).

       ARGIND      Az éppen feldolgozás alatt álló file indexe az ARGV tömbben.

       ARGV        A  parancssori  argumentumok  tömbje.  A  tömb  indexei  0-tól ( ARGC -1 ) -ig
                   tartanak. Az ARGV  tartalmának  dinamikus  megváltoztatásával  az  adatfile-ok
                   csoportja módosítható.

       CONVFMT     A számok konverziós formátuma. Alapértelmezésben %.6g.

       ENVIRON     Az  aktuális környezetet tartalmazó tömb. A tömb a környezeti változók nevével
                   van indexelve, minden elem az adott változó értéke (pl. ENVIRON["HOME"] értéke
                   lehet  /home/valaki  ).  E  tömb  megváltoztatása  nincs  hatással a gawk -ból
                   átirányítással vagy a  system()  függvénnyel  hívott  programok  által  látott
                   környezetre. (Ez a gawk jövőbeni verzióiban változhat.)

       ERRNO       Ha   rendszerhiba  történik  a  getline  -ba  átirányításkor,  a  getline  -ba
                   olvasáskor vagy a close() alatt, akkor az  ERRNO  tartalmazza  a  hibát  leíró
                   karakterláncot.

       FIELDWIDTHS A  mezőszélességek  szóközökkel  elválasztott listája. Ha ez be van állítva, a
                   gawk rögzített szélességű mezőkre tördeli a bemenetet, ahelyett,  hogy  az  FS
                   változó,  mint  mezőelválasztó  értékét  használná.  A rögzített mezőszélesség
                   használatának lehetősége még kísérleti jellegű; jelentése idővel változhat.

       FILENAME    Az aktuális bemeneti file neve. Ha  nincs  file  megadva  a  parancssorban,  a
                   FILENAME értéke ``-''. Azonban a FILENAME nem definiált a BEGIN blokkon belül.

       FNR         A bemeneti rekord sorszáma az aktuális bemeneti fájlban.

       FS          A bemeneti mezőelválasztó. Alapértelmezésben szóköz. Lásd feljebb: Mezők.

       IGNORECASE  Meghatározza    minden    reguláris    kifejezés    és    karakterlánc-művelet
                   esetérzékenységét.   Ha  az  IGNORECASE  nem  nulla,  akkor  a  karakterláncok
                   összehasonlítása  és  a  mintaillesztés,  a meződarabolás FS -szel, a rekordok
                   elválasztása RS -szel, a reguláris kifejezések illesztése ~ -vel és  !~  -vel,
                   és  a  gensub(),  gsub(),  index(),  match(), split(), valamint a sub(), előre
                   definiált függvények nem lesznek  esetérzékenyek  a  reguláris  kifejezésekkel
                   végzett   műveleteknél.  Így,  ha  az  IGNORECASE  nem  nulla,  /aB/  egyaránt
                   illeszkedik az ab, aB, Ab, és AB karakterláncokra. Mint minden AWK változónak,
                   az  IGNORECASE -nek is nulla a kezdeti értéke, tehát rendesen minden reguláris
                   kifejezés esetérzékeny. Unix alatt a teljes ISO 8859-1 Latin-1 karakterkészlet
                   használatos  az  esetérzékenység elhagyásakor.  FONTOS: a 3.0-át megelőző gawk
                   verziókban, az IGNORECASE csak a reguláris  kifejezéssel  végzett  műveletekre
                   volt hatással. Ma már befolyásolja a karakterlánc-összehasonlításokat is.

       NF          A mezők száma az aktuális bemeneti rekordban.

       NR          A már beolvasott rekordok teljes összege.

       OFMT        A számok kimeneti formátuma. Alapértelmezésben %.6g.

       OFS         A bemeneti mezőelválasztó. Alapértelmezésben szóköz.

       ORS         A kimeneti rekordelválasztó. Alapértelmezésben újsor karakter.

       RS          A bemeneti rekordelválasztó. Alapértelmezésben újsor karakter.

       RT          Rekordterminátor.  A gawk arra a bemenő szövegre állítja be, amely illeszkedik
                   az RS által meghatározott karakterre vagy reguláris kifejezésre.

       RSTART      Az első, match() által talált karakter indexe; 0, ha nincs találat.

       RLENGTH     A match() által talált karakterlánc hossza; -1, ha nincs találat.

       SUBSEP      A többindexű tömbelemek indexelválasztó karaktere. Alapértelmezésben  34.

   Tömbök
       A tömbök indexei szögletes zárójelben ([ és ]).  megadott kifejezések. Ha a kifejezés  egy
       kifejezéslista    (kif,    kif    ...)    akkor   a   tömbindex   az   egyes   kifejezések
       (karakterlánc-)értékének konkatenációjából álló karakterlánc, ahol  az  egyes  részeket  a
       SUBSEP változó értéke szerinti karakter választja el. Például:

              i = "A"; j = "B"; k = "C"
              x[i, j, k] = "hello, world\n"

       a "hello, world\n" karakterláncot rendeli az x tömb "A\034B\034C" karakterlánccal indexelt
       eleméhez. az AWK-ban minden tömb asszociatív, azaz karakterláncokkal indexelt.

       Az in, különleges operátor használható if és while utasításban annak eldöntésére, hogy egy
       tömbben létezik-e egy adott értékből álló index.

              if (val in array)
                 print array[val]

       Ha a tömb többindexű, az (i, j) in array forma alkalmazandó.

       Az in szerkezet for ciklusban is használható egy tömb minden elemének eléréséhez.

       Egy  tömbelem a delete utasítással törölhető. A delete a tömb teljes tartalmának törlésére
       is használható, a tömbnév index nélküli megadásával.

   Változótipizálás és konverzió
       A változók és mezők lehetnek (lebegőpontos) számok,  karakterláncok,  vagy  mindkettő.   A
       változó  értékének  kezelése  a  környezetétől  függ.  Ha numerikus kifejezésben szerepel,
       számként lesz kezelve, ha karakterláncként használják, akkor karakterláncként.

       Ha kényszeríteni szeretnénk, hogy egy változó számként legyen kezelve, adjunk  hozzá  0-t;
       ha azt akarjuk, hogy karakterláncként, összefűzzük az üres karakterlánccal.

       Ha  egy karakterláncot számmá kell konvertálni, a konverzió az atof(3) függvénnyel valósul
       meg. Egy szám karakterlánccá konvertálódik, ha  a  CONVFMT  értékét,  mint  az  sprintf(3)
       függvény  formázó  karakterláncát  használjuk,  argumentumként pedig a változó számértékét
       adjuk meg. Azonban, jóllehet az AWK-ban minden szám lebegőpontos, az egész értékek  mindig
       integer-szerűen konvertálódnak. Így

              CONVFMT = "%2.2f"
              a = 12
              b = a ""

       a b változó karakterlánc-értéke "12" és nem "12.00".

       A  gawk  a  következőképpen  hajtja  végre  az összehasonlítást: ha két változó numerikus,
       numerikusan hasonlít össze.  Ha az egyik érték numerikus és  a  másik  karakterlánc-érték,
       amely  ``numerikus  karakterlánc'', akkor az összehasonlítás szintén numerikusan történik.
       Egyébként a numerikus érték karakterlánccá konvertálódik  és  karakterlánc-összehasonlítás
       hajtódik  végre.   Két karakterlánc, természetesen karakterláncként hasonlítódik össze.  A
       POSIX  szabvány  szerint,  akkor  is  numerikus  összehasonlítást  kell  végezni,  ha  két
       karakterlánc  numerikus  karakterlánc.  Azonban  ez  teljesen helytelen, és a gawk nem ezt
       teszi.

       Fontos, hogy a karakterlánc konstansok, úgy mint az "57",  nem  numerikus  karakterláncok;
       ezek  karakterlánc  konstansok.   A  ``numerikus  karakterlánc'' fogalom csak a mezőkre, a
       getline bemenetre, a FILENAME -re, az ARGV elemekre, az  ENVIRON  elemekre  és  a  split()
       függvénnyel  létrehozott tömb numerikus karakterlánc elemeire vonatkozik.  Az alapgondolat
       az, hogy a numerikus alakú felhasználói bemenetet, és csak a felhasználói bemenetet szabad
       így kezelni.

       Az inicializálatlan változók numerikus érteke 0, karakterlánc-értékük "" (null-, vagy üres
       karakterlánc).

MINTÁK ÉS TEVÉKENYSÉGEK

       Az AWK sororientált nyelv.  Előbb  jön  a  minta,  majd  a  tevékenység.   A  tevékenység-
       utasítások  {  és  }  közé  vannak  zárva. Vagy a minta, vagy a tevékenység elmaradhat, de
       természetesen mindkettő nem. Ha a  minta  hiányzik,  a  tevékenység  minden  egyes  bemenő
       rekordon végrehajtódik. A hiányzó tevékenység ugyanaz, mint a

              { print }

       amely kiírja az egész rekordot.

       A  megjegyzések ``#''-kal kezdődnek és a sor végéig folytatódnak.  Üres sorok használhatók
       az utasítások elkülönítésére.  Rendszerint egy utasítás az újsor karakterrel  befejeződik,
       de  ez  nem  igaz a ``,'', {, ?, :, &&, vagy || végű sorokra. A do vagy else végű sorokban
       szereplő utasítások szintén automatikusan folytatódnak a következő sorban.  Más  esetekben
       a  sort  a  végére  írt ``´' karakterrel lehet folytatni.  Ekkor az újsor karaktert a gawk
       figyelmen kívül hagyja.

       Több, ``;''-vel elválasztott utasítás is írható  egy  sorba.   Ez  vonatkozik  egyaránt  a
       minta-tevékenység  pár  tevékenység  részében  szereplő  utasításokra  és magukra a minta-
       tevékenység utasításokra.

   Minták
       Az AWK minták a következók lehetnek:

              BEGIN
              END
              /reguláris kifejezés/
              relációs kifejezés
              minta && minta
              minta || minta
              minta ? minta : minta
              (minta)
              ! minta
              minta1, minta2

       A BEGIN és  az  END  két  speciális  minta,  amely  nem  inputfüggő.  Minden  BEGIN  minta
       tevékenység  része  egy  egységet képez úgy, mintha minden utasítás egyetlen BEGIN blokkba
       volna írva. Ezek  előbb  végrehajtásra  kerülnek,  mielőtt  bármilyen  bemenet  beolvasása
       megtörténne.  Ehhez  hasonlóan  az END blokkok is egybeolvadnak, és akkor hajtódnak végre,
       amikor minden bemenet beolvasása véget ért (vagy amikor exit utasítás hajtódik  végre).  A
       BEGIN  és az END blokkok nem kombinálhatók más mintákkal a mintakifejezésekben. A BEGIN és
       az END mintákból nem hiányozhat a tevékenység rész.

       A /reguláris kifejezés/ mintákhoz rendelt utasítás minden  olyan  rekordra  végrehajtódik,
       amely  illeszkedik  a  reguláris kifejezésre. A reguláris kifejezések azonosak az egrep(3)
       programéival. Ezek összefoglalását lásd lejjebb.

       A relációs kifejezésekben szerepelhet bármelyik, a lenti, tevékenységekről  szóló  részben
       definiált   operátorok  közül.  Ezek  rendszerint  azt  ellenőrzik,  hogy  bizonyos  mezők
       illeszkednek-e bizonyos reguláris kifejezésekre.

       Az &&, ||, és !  operátorok rendre a logikai ÉS, logikai VAGY és logikai NEM,  mint  a  C-
       ben.   Rövidzár  kiértékelést végeznek, szintén, mint a C-ben. Egyszerűbb mintakifejezések
       összekapcsolására  szolgálnak.  Mint  a  legtöbb  nyelvben,   zárójelek   használhatók   a
       kiértékelés sorrendjének megváltoztatására.

       A ?: operátor hasonlít a C ugyanezen operátorához.  Ha az első minta igaz, akkor a második
       minta kerül felhasználásra az ellenőrzéshez, egyébként a harmadik.  A második és  harmadik
       minta közül csak az egyik értékelődik ki.

       A  minta1,  minta2  kifejezésforma  neve  tartományminta.   Ez  illeszkedik  a  minta1 -re
       illeszkedő rekorddal kezdve folytatólagosan minden bemenő  rekordra,  egy,  a  minta2  -re
       illeszkedő  rekordig  -  beleértve  a két határmintára illeszkedő rekordokat.  Nem működik
       együtt másfajta mintakifejezésekkel.

   Reguláris kifejezések
       A reguláris kifejezések az  egrep  -ben  megtalálható  kibővített  típusúak.  A  következő
       karakterekből állnak:

       c          a nem-metakarakter c-re illeszkedik.

       \c         a  literális  c  karakterre  illeszkedik.   .   minden  karakterre illeszkedik,
                  beleértve az újsort.

       ^          egy karakterlánc kezdetére illeszkedik.

       $          egy karakterlánc végére illeszkedik.

       [abc...]   karakterlista, amely az abc...  karakterek bármelyikére illeszkedik.

       [^abc...]  negált karakterlista, minden karakterre illeszkedik, kivéve abc...  -t.

       r1|r2      vagylagosság: r1 -re vagy r2 -re illeszkedik.

       r1r2       összekapcsolás: az r1 és r2 sorozatra illeszkedik.

       r+         egy vagy több r -re illeszkedik.

       r*         nulla vagy több r -re illeszkedik.

       r?         nulla vagy egy r -re illeszkedik.

       (r)        csoportosítás: r -re illeszkedik.  r.

       r{n}
       r{n,}
       r{n,m}     Egy vagy két szám kapcsos zárójelek között  intervallum-kifejezést  jelent.  Ha
                  egy  szám  szerepel  a zárójelek között, az előtte álló r reguláris kifejezés n
                  -szer megismétlődik. Ha két szám van zárójelezve, vesszővel elválasztva, r n és
                  m közötti számszor ismétlődik meg.  Ha egy számot követ vessző, ez r legalább n
                  -szeri ismétlését jelzi.
                  Az intervallum-kifejezések csak akkor használhatók, ha a parancssorban  --posix
                  vagy --re-interval opciót jelölünk meg.

       \y         egy szó elején vagy végén álló üres karakterláncra illeszkedik.

       \B         egy szón belüli üres karakterláncra illeszkedik.

       \<         egy szó elején álló üres karakterláncra illeszkedik.

       \>         egy szó végén álló üres karakterláncra illeszkedik.

       \w         minden szóalkótó karakterre (betű, szám, aláhúzás) illeszkedik.

       \W         minden nem-szóalkótó karakterre illeszkedik.

       \`         egy puffer (karakterlánc) elején álló üres karakterláncra illeszkedik.

       \'         egy puffer végén álló üres karakterláncra illeszkedik.

       A   karakterlánc   konstansokban   érvényes  escape  szekvenciák  (lásd  lejjebb)  szintén
       használhatók a reguláris kifejezésekben.

       A karakterosztály a POSIX szabványban bevezetett  új  lehetőség.   A  karakterosztály  egy
       speciális  jelölés adott attribútumú karakterek leírásához, ahol viszont a tulajdonképpeni
       karakterek ország és  ország  és/vagy  karakterkészlet  és  karakterkészlet  között  mások
       lehetnek.   Például  az  alfabetikus  karakter  fogalma  mást  jelent  az  USA-ban és mást
       Franciaországban.

       A  karakterosztályok  csak  a  karakterlista   szögletes   zárójelein   belüli   reguláris
       kifejezésben  használhatók.  Formájuk: [:, az osztályt jelölő kulcsszó és :].  Íme a POSIX
       szabványban definiált karakterosztályok.

       [:alnum:]
              Alfanumerikus karakterek.

       [:alpha:]
              Alfabetikus karakterek.

       [:blank:]
              Space vagy tab karakterek.

       [:cntrl:]
              Vezérlő karakterek.

       [:digit:]
              Numerikus karakterek.

       [:graph:]
              Látható és nyomtatható karakterek. (A space nyomtatható, de nem látható, míg egy  a
              mindkettő.)

       [:lower:]
              Kisbetűs alfabetikus karakterek.

       [:print:]
              Nyomtatható karakterek (nem vezérlő karakterek.)

       [:punct:]
              Írásjelek (nem betű-, szám-, vezérlő vagy space karakterek).

       [:space:]
              Space karakterek (úgy mint például space, tab és lapdobás).

       [:upper:]
              Nagybetűs alfabetikus karakterek.

       [:xdigit:]
              Hexadecimális számkarakterek.

       Példának okáért, a POSIX szabvány előtt, az alfanumerikus karakterekre illeszkedést a /[A-
       Za-z0-9]/ leírásával lehetett volna elérni.  Ha  karakterkészletünkben  egyéb  alfabetikus
       karakterek  is vannak, ez nem fog illeszkedni rájuk.  A POSIX karakterosztályt használva a
       /[[:alnum:]]/ forma illeszkedni fog a  karakterkészlet  minden  alfabetikus  és  numerikus
       karakterére.

       Két  további  speciális  szekvencia  is  megjelenhet  a karakterlistákban.  Ezek nem-ASCII
       karakterkészletekre vonatkoznak, amelyeknek lehetnek olyan  szimbólumaik  (  egybeolvasott
       elemek  ),  amelyek  több, mint egy karakterrel vannak ábrázolva, és számos olyan karakter
       is, amelyek  összehasonlító  vagy  rendező  szempontból  egyenértékűek.   (Pl.  a  francia
       nyelvben a sima ``e'' és a tompaékezetes e` egyenértékűek.)

       Egybeolvasott szimbólumok
              Az  egybeolvasott  szimbólum egy többkarakteres egybeolvasott elem, amely [.  és .]
              közé van zárva. Például, ha  ch  egy  egybeolvasott  elem,  akkor  [[.ch.]]   az  a
              reguláris  kifejezés,  amely  illeszkedik  rá, míg a [ch] reguláris kifejezés c-re,
              vagy h-ra illeszkedik.

       Ekvivalenciaosztályok
              Az ekvivalenciaosztály ekvivalens karakterek listájának helyileg definiált neve.  A
              név [= és =] közé van zárva. Például az e név használható volna az ``e'', ``e''' és
              ``e`'' mindegyikének ábrázolására.  Ebben az  esetben  a  [[=e=]]  olyan  reguláris
              kifejezés, amely e-re e'-re és e`-re is illeszkedik.

       Ezek  a  szolgáltatások  igan  hasznosak a nem angolul beszélő területeken. A gawk által a
       reguláris kifejezések illesztéséhez használt könyvtári függvények jelenleg  csak  a  POSIX
       karakterosztályokat  ismerik  fel;  nem  kezelik  az  egybeolvasott  szimbólumokat vagy az
       ekvivalenciaosztályokat.

       A \y, \B, \<, \>, \w,  \W,  \`,  és  \'  operátorok  gawk-specifikusak;  a  GNU  reguláris
       kifejezés könyvtárainak szolgáltatásaira épülő bővítések.

       A számos parancsssori opció azt szabályozza, hogy a

       hogyan kezelje a reguláris kifejezésekben szereplő karaktereket.

       Nincs opció
              Alapesetben  a  gawk  a  POSIX  reguláris kifejezések és a fent leírt GNU reguláris
              kifejezés  operátorok  minden  szolgáltatását  nyújtja.   Azonban  az  intervallum-
              kifejezések nincsenek támogatva.

       --posix
              Csak  a POSIX reguláris kifejezések támogatottak, a GNU operátorok nem definiáltak.
              (Pl.   a   \w   a   literális   w-re   illeszkedik).   Az   intervallum-kifejezések
              engedélyezettek.

       --traditional
              A  hagyományos  Unix  awk  reguláris  kifejezései  működnek.  A  GNU operátorok nem
              definiáltak, az intervallum-kifejezések nem elérhetők és a POSIX  karakterosztályok
              sem ([[:alnum:]] stb). Az oktális vagy hexadecimális escape szekvenciákkal megadott
              karakterek  kezelése  literális,  még  ha  reguláris   kifejezés   metakaraktereket
              ábrázolnak is.

       --re-interval
              Engedélyezi  az  intervallum-kifejezéseket  a  reguláris  kifejezésekben,  még ha a
              --traditional opció meg is van adva.

   Tevékenységek
       A tevékenységek utasításai { és } közé vannak zárva. A más nyelvekben meglévő,  megszokott
       értékadó,  feltételes  és  ciklusutasításokból  állnak.  A használható operátorok, vezérlő
       utasítások és bemeneti/kimeneti utasítások a C-beli megfelelőkről vannak mintázva.

   Operátorok
       Az AWK operátorai csökkenő precedencia szerint:

       (...)       Csoportosítás.

       $           Mezőhivatkozás.

       ++ --       Inkrementálás és dekrementálás, mindkettő prefix és postfix.

       ^           Hatványozás (** szintén használható, **= pedig értekadó operátorként).

       + - !       Egyoperandusú plusz/mínusz és logikai tagadás.

       * / %       Szorzás, osztás és maradékképzés.

       + -         Összeadás és kivonás.

       space       Karakterláncok összekapcsolása (konkatenáció).

       < >
       <= >=
       != ==       A megszokott relációs operátorok.

       ~ !~        Reguláris kifejezés illeszkedése, nem-illeszkedése.   FONTOS:  Ne  használjunk
                   konstans reguláris kifejezést (/foo/) ~ vagy !~ baloldalán, csakis a jobbon! A
                   /foo/ ~ exp  kifejezés  jelentése  ugyanaz,  mint  a  (($0  ~  /foo/)  ~  exp)
                   kifejezésé. Rendszerint nem ezt várják.

       in          Tömbhöz tartozás.

       &&          Logikai ÉS.

       ||          Logikai VAGY.

       ? :         A  C feltételes kifejezése. Ennek formája kif1 ? kif2 : kif3.  Ha kif1 igaz, a
                   kifejezés értéke kif2, egyébként kif3.  Csak egy értékelődik ki kif2  és  kif3
                   közül.

       = += -=
       *= /= %= ^= Értékadás.  Úgy az abszolút értékadás (var = value) mint az operátor-értékadás
                   (a többi forma) egyaránt támogatott.

   Vezérlő utasítások
       A vezérlő utasítások a következők:

              if (feltétel) utasítás [ else utasítás ]
              while (feltétel) utasítás
              do utasítás while (feltétel)
              for (kif1; kif2; kif3) utasítás
              for (var in array) utasítás
              break
              continue
              delete array[index]
              delete array
              exit [ kifejezés ]
              { utasítások }

   Bemeneti/kimeneti utasítások
       A bemeneti/kimeneti utasítások a következők:

       close(file)           Lezárja a fájlt (vagy csatornát, lásd lenn).

       getline               $0 értékét a következő bemeneti rekordból veszi; beállítja  NF,  NR,
                             FNR értékét.

       getline <file         $0  értékét  file következő bemeneti rekordjából veszi; beállítja NF
                             értékét.

       getline var           var értékét a következő bemeneti rekordból veszi; beállítja NF,  FNR
                             értékét.

       getline var <file     var értékét file következő rekordjából veszi.

       next                  Abbamarad  az  aktuális rekord feldolgozása. Megtörténik a következő
                             bemeneti rekord beolvasása és a  feldolgozás  az  AWK  program  első
                             mintájával  kezdődik.  Ha  a  végrehajtás  elérte  a bemeneti adatok
                             végét, az END blokk(ok) (ha van(nak)) kerülnek végrehajtásra.

       nextfile              Abbamarad  az  aktuális  bemeneti  file  feldolgozása.  A  következő
                             bemeneti  rekord  a  következő  fájlból érkezik.  FILENAME és ARGIND
                             aktualizálódik, FNR értéke 1-re áll be,  és  a  feldolgozás  az  AWK
                             program első mintajával kezdődik. Ha a vegrehajtás elérte a bemeneti
                             adatok végét, az END blokk(ok) (ha van(nak)) kerülnek végrehajtásra.
                             FONTOS: A gawk korábbi verziói a next file -t két szóban használták.
                             Noha még felismeri ezt a használati  módot,  figyelmeztető  üzenetet
                             generál és előbb-utóbb elhagyásra kerül.

       print                 Kiírja  az  aktuális  rekordot.  A  kimeneti  rekord  az ORS változó
                             értékével fejeződik be.

       print expr-list       Kiírja a  kifejezések  értékét.  Minden  kifejezés  az  OFS  változó
                             értékével választódik el. A kimeneti rekord az ORS változó értékével
                             fejeződik be.

       print expr-list >file A file-ba írja  a  kifejezések  értékét.  Minden  kifejezés  az  OFS
                             változó  értékével  választódik  el. A kimeneti rekord az ORS áltozó
                             értékével fejeződik be.

       printf fmt, expr-list Formáz és kiír.

       printf fmt, expr-list >file
                             Formáz és a file-ba ír.

       system(cmd-line)      Végrehajtja a cmd-line parancsot, és visszatér az  exit  státusszal.
                             (Ez lehet, hogy nem használható nem-POSIX rendszerekben.)

       fflush([file])        Lemezre  ír  minden,  a  nyitott  kimeneti  vagy  csatorna file -hoz
                             rendelt puffert.  Ha a file paraméter nincs  megadva,  a  szabványos
                             kimenetre  ír.   Ha  file  üres  karakterlánc,  akkor minden nyitott
                             kimeneti és csatorna file puffere kiíródik.

       Egyéb kimeneti/bemeneti  átirányítások  is  megengedettek.  A  print  -re  és  printf  -re
       vonatkozóan  a >>file a kimenetet a file végére írja, míg a | parancs csatornába ír. Ehhez
       hasonlóan a parancs | getline getline-ba irányít át. A getline parancs 0-val tér vissza  a
       file végénél és -1-gyel hiba esetén.

   A printf utasítás
       A  printf  utasítás  és sprintf() függvény (lásd lenn) AWK verziója a következő konverziós
       karaktereket fogadja el:

       %c     Egy ASCII karakter. Ha %c -hez rendelt argumentum numerikus,  a  gawk  karakterként
              kezeli és kiírja. Egyébként feltételezi, hogy az argumentum karakterlánc, és csak a
              karakterlánc első karakterét írja ki.

       %d
       %i     Decimális szám (az egészrész).

       %e
       %E     [-]d.dddddde[+-]dd formájú lebegőpontos szám. A %E -s forma E -t használ e helyett.

       %f     [-]ddd.dddddd formájú lebegőpontos szám.

       %g
       %G     A %e vagy %f konverziók közül  a  rövidebbet  alkalmazza.  Az  értéktelen  nullákat
              elhagyja.  A %G -s  forma %E -t alkalmaz %e helyett.

       %o     Jelöletlen oktális szám (megint csak egész).

       %s     Karakterlánc.

       %x
       %X     Jelöletlen  hexadecimális  szám  (egész).  A %X -es forma ABCDEF -et használ abcdef
              helyett.

       %%     Egy % karakter; argumentumot nem konvertál.

       Léteznek további,  opcionális  paraméterek,  amelyek  a  %  és  a  vezérlőkarakter  között
       állhatnak:

       -      A kifejezésnek a mezőben balra igazítva kell megjelennie.

       space  Numerikus  konverziókban  space-et ír a pozitív, mínusz jelet a negatív kifejezések
              elé.

       +      A plusz jel - a szélességmódosító előtt (lásd lejjebb) használva - előírja, hogy  a
              numerikus  konverziókban  mindig  előjelet kell írni, akkor is, ha a formázott szám
              pozitív. A + felülbírálja a space jelzőt.

       #      ``Alternatív forma'' használata bizonyos vezérlő betűkhöz. A %o -hoz  bevezető  0-t
              ad.  A %x -hez és %X -hez bevezető 0x -et vagy 0X -et ad, ha az eredmény nem nulla.
              A %e, %E és %f esetében az eredmény mindig tartalmazni fog tizedespontot. A %g -nél
              és %G -nél a számvégi nullák nem maradnak ki az eredményből.

       0      A  bevezető  0  jelzőként  működik, amely azt mutatja, hogy a kimenetben a bevezető
              space-ek helyett nullák legyenek.  Ez  a  nem-numerikus  kimenetek  formázására  is
              vonatkozik. Ennek a jelzőnek csak akkor van hatása, amikor a mező szélesebb, mint a
              kiírandó szöveg.

       width  A mezőt ilyen szélességűre kell feltölteni.  A  feltöltés  rendszerint  space-ekkel
              történik. Ha a 0 jelzőt használjuk, nulla lesz a kitöltő karakter.

       .prec  Szám,  amely  meghatározza  a  kiíráskor  alkalmazandó  pontosságot. A %e, %E és %f
              formák esetében ez határozza meg a tizedespont jobb oldalán  kiírni  kívánt  jegyek
              számát.  A %g és %G formáknál ez az értékes jegyek maximális számát adja meg. A %d,
              %o, %i, %u, %x és  %X  formák  esetében  ez  a  kiírandó  jegyek  maximális  számát
              határozza meg.

       Az   ANSI   C   printf()  rutinjainak  dinamikus  szélesség  és  pontosság  szolgáltatásai
       támogatottak. Egy * a width vagy prec előírások helyén azt eredményezi, hogy  értéküket  a
       printf vagy sprintf() argumentumlistájából veszik.

   Különleges fájlnevek
       Amikor  akár  print  -ből,  akár  printf  -ből  bemeneti/kimeneti átirányítást végzünk egy
       fájlba, a gawk felismer  néhány  speciális  fájlnevet.  Ezek  elérhetővé  teszik  a  szülő
       processzből  (ez rendszerint a shell) örökölt nyitott fájldeszkriptorokat.  Más különleges
       fájlnevek a futó gawk  processzről  szóló  információhoz  szolgáltatnak  elérést.  Ezek  a
       fájlnevek:

       /dev/pid    E  file olvasása visszaadja az aktuális processz újsorral terminált, decimális
                   azonosítóját.

       /dev/ppid   E file olvasása visszaadja a  szülő  processz  újsorral  terminált,  decimális
                   azonosítóját.

       /dev/pgrpid E  file olvasása visszaadja az aktuális processz újsorral terminált, decimális
                   csoportazonosítóját.

       /dev/user   E file olvasása egy, újsorral terminált rekordot ad vissza. A mezők space-szel
                   vannak  elválasztva.   $1  a  getuid(2)  rendszerhívás értéke, $2 a geteuid(2)
                   rendszerhívás értéke, $3 a getgid(2) -é és $4 a getegid(2) -é. Ha további mező
                   fordul  elő,  akkor  azok a getgroups(2) által visszaadott group ID-k.  Lehet,
                   hogy a többcsoportúságot nem minden rendszer támogatja.

       /dev/stdin  A szabványos bemenet.

       /dev/stdout A szabványos kimenet.

       /dev/stderr A szabványos hibakimenet.

       /dev/fd/n   A nyitott n file-deszkriptorhoz rendelt file.

       Ezek különösen hibaüzenetek szempontjából fontosak.  Például:
              print "A gépnek annyi!" > "/dev/stderr"

       ahol egyébként a következő formát kellene használni:

              print "A gépnek annyi!" | "cat 1>&2"

       Ezek a fájlnevek a parancssorban is felhasználhatók adatfile-ok megnevezésére.

   Numerikus függvények
       Az AWK a következő elődefiniált aritmetikai függvényekkel rendelkezik:

       atan2(y, x)   visszaadja radiánban y/x arkusz tangensét.  cos(expr) visszaadja expr radián
                     koszinuszát.

       exp(expr)     az exponenciális függvény.

       int(expr)     egészrészre csonkol.

       log(expr)     természetes alapú logaritmus függvény.

       rand()        visszaad egy véletlenszámot 0 és 1 között.

       sin(expr)     visszaadja expr radián szinuszát.

       sqrt(expr)    a négyzegyökfüggvény.

       srand([expr]) expr  értékét  használja  a  véletlenszámgenerátor inicializálására. Ha expr
                     nincs megadva, az időt  használja.  A  visszatérési  érték  a  véletlenszám-
                     generátor korábbi inicializáló értéke.

   Karakterlánc-függvények
       A gawk a következő elődefiniált karakterlánc függvényekkel rendelkezik:

       gensub(r, s, h [, t])   a  t  tárgykarakterláncban  keresi  r reguláris kifejezést. Ha h g
                               vagy G kezdetű karakterlánc, akkor r minden  illeszkedését  s  -re
                               cseréli.  Egyébként  h  egy  szám,  amely azt jelzi, hogy r melyik
                               illeszkedését  kell  lecserélni.  Ha  t  nincs  megadva,   $0   -t
                               alkalmazza. Az s csereszövegben a \n, szekvencia (ahol n egy, 0 és
                               9 közötti számjegy) használható a csak az n -edik zárójelezett al-
                               kifejezésre illeszkedő szöveg jelölésére. A \0 szekvencia az egész
                               illeszkedő  szöveget  jelképezi,  csakúgy  mint  az  &   karakter.
                               Eltérően  a  sub() és gsub() függvényektől, a visszatérési érték a
                               módosított karakterlánc, az eredeti  tárgykarakterlánc  pedig  nem
                               módosul.

       gsub(r, s [, t])        t   karakterlánc   minden   r   reguláris  kifejezésre  illeszkedő
                               alkarakterláncát  s  karakterláncra  cseréli   és   visszaadja   a
                               helyettesítések  számát.  Ha t nincs megadva, $0 -ban keres. Egy &
                               jel a  csereszövegben  az  illeszkedő  szöveggel  helyettesítődik,
                               literális  &  eléréséhez  \& forma alkalmazandó. Az & és backslash
                               jelek csereszövegekbeni alkalmazási szabályairól a  sub(),  gsub()
                               és  gensub() függvényekben bővebb leírás olvasható az AWK Language
                               Programming c. könyvben.

       index(s, t)             visszaadja t karakterlánc s karakterláncbeli indexét vagy 0-t,  ha
                               t nem szerepel s -ben.

       length([s])             visszatér  s  karakterlánc  hosszával  (vagy  $0 -éval, ha s nincs
                               megadva).

       match(s, r)             visszaadja r reguláris kifejezés s  -ben  elfoglalt  helyét  (vagy
                               0-t,  ha  r  nem  szerepel  benne), és beállítja RSTART és RLENGTH
                               értékét.

       split(s, a [, r])       r  regurális  kifejezés  alapján  a  t  tömbbe  darabolja   az   s
                               karakterláncot  és visszatér a mezők számával. Ha r elmarad, FS -t
                               használja.  A  darabolás  a  -  fent  leírt  -  mezőkre  bontással
                               megegyezően történik.

       sprintf(fmt, expr-list) a  fmt  -nak  megfelelően kiírja a kifejezéslistát és visszatér az
                               eredmény-karakterlánccal.

       sub(r, s [, t])         mint a gsub() függvény, de csak az első illeszkedést cseréli.

       substr(s, i [, n])      visszaadja s karakterlánc i-nél kezdődő, legfeljebb  n  karakteres
                               alkarakterláncát.   Ha   n   nincs  megadva,  s  teljes  maradékát
                               alkalmazza.

       tolower(str)            visszatér str karakterlánc másolatával, amelyben minden  nagybetűt
                               a  megfelelő  kisbetűre  alakít.  A nem-alfabetikus karakterek nem
                               változnak.

       toupper(str)            visszatér str karakterlánc másolatával, amelyben minden kisbetűt a
                               megfelelő  nagybetűre  alakít.   A  nem-alfabetikus karakterek nem
                               változnak.

   Időfüggvények
       Mivel az AWK programok egyik elsődleges felhasználási területe a log fájlok feldolgozása -
       amelyek  időadatot  tartalmaznak  -, a gawk a következő két függvényt nyújtja az időadatok
       kinyeréséhez és formázásához:

       systime() visszaadja  az  Epoch  (POSIX  rendszereken  1970.   jan.   1.   00:00:00)   óta
                 másodpercekben eltelt időt.

       strftime([format [, timestamp]])
                 az időadatot a formátumnak megfelelően formázza. Az időadatnak a systime() által
                 visszaadott formával megegyezőnek kell lennie. Ha a formátum hiányzik, a date(1)
                 parancs  kimenetével megegyező, alapértelmezett formátumot alkalmaz.  A biztosan
                 használható  formátum  konverziókat  lásd  az  ANSI  C  strftime()  függvényének
                 specifikációjánál.  A  gawk  -kal  jár  az  strftime(3)  függvény  public-domain
                 verziója és az ahhoz tartozó man lap. Ha  a  gawk  fordításakor  ezt  a  verziót
                 használták, akkor a man lapban leírt minden konverzió elérhető a gawk számára.

   Karakterlánc állandók
       Az  AWK  karakterláncai  dupla idézőjelek (") közé zárt karaktersorozatok. A gawk bizonyos
       escape szekvenciákat felismer a karakterláncokban. Ezek:

       \\   Literális backslash.

       \a   Az "alert" karakter; rendszerint az ASCII csengő (ASCII BEL) karakter.

       \b   Backspace.

       \f   Lapdobás.

       \n   Újsor.

       \r   Kocsivissza.

       \t   Vízszintes tabulátor.

       \v   Függőleges tabulátor.

       \x hexa jegyek
            A \x -et követő hexadecimális számmal jelzett karakter. Mint az ANSI C-ben, az  utána
            álló  minden  hexadecimális  jegy az escape szekvencia részeként kerül feldolgozásra.
            (Ez a jellemző kell hogy mondjon valamit  a  bizottsági  nyelvtervezésről.)   Pl.  az
            "\x1B" az ASCII ESC (escape) karakter.

       \ddd Az  egy-, két-, vagy háromjegyű oktális számnak megfelelő karakter.  Pl. az "\033" az
            ASCII ESC (escape) karakter.

       \ c  A literális c karakter.

       Az  escape  szekvenciák  konstans  reguláris  kifejezésekben  szintén  használhatók   (pl.
       /[ \t\f\n\r\v]/ whitespace karakterekre illeszkedik).

       Kompatíbilis  módban az oktális vagy hexadecimális escape szekvenciákkal jelölt karakterek
       literálisan kerülnek feldolgozásra a regurális  kifejezés  konstansokban.  Így  a  /a\52b/
       ugyanaz, mint a /a\*b/.

FÜGGVÉNYEK

       Az AWK függvényei a következőképpen definiálandók:

              function név(paramáterlista) { utasítások }

       A  függvények  végrehajtása akár mintából, akár tevékenységből való meghívásukkor történik
       meg. A függvényhívásokban megadott aktuális paraméterek a függvényekben deklarált formális
       paramétereknek  adnak  konkrét  értéket.  A  tömbök  átadása  hivatkozás szerinti, a többi
       paraméteré érték szerinti.

       Mivel a függvények eredetileg nem voltak az AWK nyelv részei, a  lokális  változók  eléggé
       suta  módon  adhatók  meg:  a  paraméterlistában  extra  paraméterekként  deklarálandók. A
       konvenció az, hogy a paraméterlistában a lokális változókat extra  space-ekkel  választják
       el a valódi paraméterektől.  Például:

              function  f(p, q,     a, b)   # a és b lokális
              {
                 .....
              }

              /abc/ { ... ; f(1, 2) ; ... }

       A  függvényhívás  bal  oldali  zárójelének  közvetlenül  kell  követnie  a  függvénynevet,
       whitespace nem lehet közöttük. Ez a konkatenációs operátorral való összekeverés elkerülése
       miatt van így. A megkötés nem vonatkozik a fent felsorolt beépített függvényekre.

       A  függvények  hívhatják  egymást  és  lehetnek rekurzívak. A lokális változóként használt
       függvényparaméterek  üres   karakterlánc   és   zéró   számértékkel   inicializálódnak   a
       függvényhívás során.

       Ha  a  --lint  opció  meg  van  adva, a gawk fordítási és nem futási időben figyelmeztet a
       definiálatlan függvények hívása esetén. Futási időben egy definiálatlan függvény meghívása
       fatális hiba.

       A func kulcsszó használható a function helyén.

PÉLDÁK

       Az összes felhasználó login nevének rendezése és kiírása:

          BEGIN { FS = ":" }
             { print $1 | "sort" }

       Egy file sorainak megszámlálása:

             { nlines++ }
          END   { print nlines }

       A file minden sora elé a sorszám kiírása:

          { print FNR, $0 }

       A sorszám konkatenációja (egy témavariáció):

          { print NR, $0 }

LÁSD MÉG

       egrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2),
       getgroups(2)

       The AWK Programming Language, Alfred V. Aho, Brian  W.  Kernighan,  Peter  J.  Weinberger,
       Addison-Wesley, 1988. ISBN 0-201-07981-X.

       AWK Language Programming, Edition 1.0, published by the Free Software Foundation, 1995.

POSIX KOMPATIBILITÁS

       A  gawk  egyik  elsődleges  célja  a POSIX szabvánnyal - csakúgy, mint a UNIX awk legújabb
       verziójával - való kompatibilitás. E célból a gawk egyesíti a következő, felhasználó által
       látható  szolgáltatásokat,  amelyeket  nem  ír  le az AWK könyv, de részei a Bell Labs awk
       verziójának, és a POSIX szabványnak.

       Új dolog a -v opció a programvégrehajtás megkezdése előtti változó-értékadáshoz.  A  könyv
       azt  jelzi,  hogy  a  parancssori  értékadás  akkor  történik meg, amikor az awk egyébként
       fájlként nyitná meg az argumentumot - amely a BEGIN blokk végrehajtása után  valósul  meg.
       Azonban  a  korai megvalósításokban, amikor ilyen értékadás jelent meg fájlnevek előtt, az
       megtörtént,  mielőtt  a  BEGIN  blokk   lefutott   volna.   Programok   váltak   ettől   a
       ``szolgáltatástól''  függővé.  Amikor  az  awk -ot a dokumentációjához igazították, ezt az
       opciót adták hozzá, hogy alkalmazkodjon a régi viselkedéstől  függő  alkalmazásokhoz.   (E
       szolgáltatással szemben nem volt ellenvetés sem az AT&T, sem a GNU fejlesztői részéről.)

       Az alkalmazás specifikus szolgáltatásokhoz tartozó -W opció a POSIX szabványból ered.

       Az  argumentumok  feldolgozása  során  a  gawk  a  ``--''  speciális  opciót  használja az
       argumentumok  végének  jelzéséhez.   Kompatíbilis  módban  figyelmeztet  a   definiálatlan
       opciókra,  másrészről  viszont  figyelmen  kívül hagyja azokat. Rendes működéskor az ilyen
       argumentumok átadódnak az AWK programnak, hogy az dolgozza fel őket.

       Az AWK könyv nem definiálja az srand() visszatérési értékét. A POSIX szabvány  szerint  az
       inicializáló  értéket adja vissza, lehetővé téve a véletlenszám-sorozatok nyomonkövetését.
       Ezért a gawk srand() függvénye szintén az említett számmal tér vissza.

       További új szolgáltatások: Több -f opció használata (az MKS awkból); az ENVIRON tömb; a \a
       és  \v escape szekvenciák (eredetileg a gawk -ban, majd onnan áttéve az AT&T awk -jába); a
       tolower() és toupper() beépített függvények (az AT&T-ből); és a printf ANSI  C  konverziós
       szabályai (először az AT&T verzióban).

GNU BŐVÍTÉSEK

       A  gawk  számos  szolgáltatással  kibővíti  a  POSIX awk -ot. Ezek leírása ebben a részben
       szerepel. Minden itt felsorolt bővítés kikapcsolható a gawk --traditional opció hívásával.

       A gawk következő szolgáltatásai nem érhetők el a POSIX awk -ban:

              • A \x escape szekvencia. (A --posix kikapcsolja).

              • Az fflush() függvény. (A --posix kikapcsolja).

              • A systime(), strftime() és gensub() függvények.

              • A bemeneti/kimeneti átirányításra használt különleges fájlneveket nem ismeri fel.

              • Az ARGIND, ERRNO és RT változóknak nincs speciális jelentésük.

              • Az IGNORECASE változó és annak mellékhatásai nem érhetők el.

              • A FIELDWIDTHS változó és a rögzített szélességű meződarabolás.

              • Az RS változó reguláris kifejezésként való használata.

              • Egyes karakterekre szétvágás az FS változó vagy a split() harmadik argumentumának
                üres karakterláncra állításával.

              • Nincs  elérési  út bejárás a -f opcióval megadott fájlok megtalálásához. Tehát az
                AWKPATH környezeti változónak nincs különleges jelentése.

              • Az aktuális file feldolgozásának megszüntetésére használt nextfile utasítás.

              • A delete array használata egy teljes tömb törléséhez.

       Az AWK könyv nem definiálja a  close()  függvény  visszatérési  értékét.  A  gawk  close()
       függvénye  az  fclose(3) vagy pclose(3) függvénytől kapott értéket adja vissza, amikor egy
       fájlt illetve csatornát lezár.

       A gawk --traditional opcióval történő hívásakor - ha a -F opciónak adott fs értéke ``t'' -
       az  FS  értéke  a  tab  karakter lesz. Fontos, hogy a gawk -F\t ...  megadása egyszerűen a
       shell ``t''-re hivatkozását eredményezi, és nem ad át ``\t''-t a -F  opciónak.   Mivel  ez
       egy meglehetősen csúnya, speciális eset, nem ez az alapértelmezett viselkedés. Szintén nem
       ez történik, ha a --posix  opció  meg  van  adva.  Hogy  igazán  a  tab  karaktert  kapjuk
       mező-elválasztóként, a legjobb, ha aposztrófot használunk: gawk -F'\t' ....

TÖRTÉNELMI SZOLGÁLTATÁSOK

       A  történelmi  AWK  megvalósításoknak  két  szolgáltatását  támogatja  a  gawk.   Először:
       lehetőség van a length() beépített függvény nem csak argumentumok, hanem zárójelek nélküli
       hí- vására is. Ilyenformán az

              a = length  # Holy Algol 60, Batman!

       ugyanaz, mint bármelyik az

              a = length()
              a = length($0)

       közül.  Ezt  a  lehetőséget ``helytelenítik'' a POSIX szabványban, és a gawk figyelmeztető
       üzenetet jelenít meg, ha a --lint opció meg van adva a parancssorban.

       A másik szolgáltatás a continue vagy break utasítás használata while, for vagy  do  ciklus
       törzsén  kívül.  A  tradícionális  AWK megvalósítások ezt a használatot a next utasítással
       egyenértékűként  kezelték.  A  gawk  --traditional  megadása  esetén   támogatja   ezt   a
       használatot.

KÖRNYEZETI VÁLTOZÓK

       Ha  a  POSIXLY_CORRECT  környezeti  változó létezik, akkor a gawk pontosan úgy viselkedik,
       mintha a --posix volna megadva a  parancsssorban.  Ha  a  --lint  meg  van  adva,  a  gawk
       figyelmeztető üzenetet küld erről a hatásról.

       Az  AWKPATH  környezeti  változó használható olyan könyvtárak megadására, amelyeket a gawk
       bejár a -f és --file opcióval megadott fájlok megkeresése érdekében.

HIBÁK

       A -F opcióra nincs szükség, adva lévén a parancsori változó-értékadás lehetősége; csupán a
       kompatibilitás fenntartása miatt marad.

       Ha  a  rendszer  támogatja  a  /dev/fd,  és  az  összerendelt  /dev/stdin/, /dev/stdout és
       /dev/stderr  file-okat,  lehet,  hogy  más  lesz  a  kimenet,  mint  ezen  fájlok  nélküli
       rendszereken.  Amikor  a gawk belül emulálja ezeket a fájlokat, összehangolja a szabványos
       kimenetre küldött kimenetet a /dev/out-ba  küldött  kimenettel;  míg  az  ilyen  fájlokkal
       rendelkező rendszereken a kimenet lényegében más fájlokba megy. Vigyázz, Vásárló!

       Szintaktikailag  érvénytelen  egykarakteres programok valószínűleg túlcsordulnak az elemző
       vermen, és meglehetősen semmitmondó üzenetet generálnak. Az  ilyen  programokat  meglepően
       nehéz   teljesen   általános  esetben  felismerni,  és  igazán  nem  éri  meg  ilyenirányú
       erőfeszítéseket tenni.

VERZIÓ

       Ez a man lap a 3.0.2-es verziószámú gawk -ot dokumentálja.

SZERZŐK

       A UNIX awk eredeti verzióját Alfred Aho, Peter Weinberger és Brian Kernighan  tervezte  és
       vitelezte ki a AT&T Bell Labs-nál. Brian Kernighan továbbra is javítja és fejleszti.

       A  gawkot  Paul  Rubin  és  Jay  Fenlason  írta  a Szabad Software Alapítványnál úgy, hogy
       kompatíbilis legyen a Seventh Edition UNIX-ban közzétett eredeti awk verzióval. John Woods
       számos  hibajavítással  járult  hozzá.  David  Trueman  -  Arnold  Robbins támogatásával -
       kompatíbilissá tette az awk -ot a UNIX awk új  verziójával.  Arnold  Robbins  a  jelenlegi
       karbantartó.

       Az  eredeti  DOS-os  változatot  Conrad Kwok  és  Scott Garfinkle készítette.  A jelenlegi
       DOS-os karbantartó Scott Deifik. Pat Rankin munkája a VMS változat, és Michal  Jaegermanné
       az  Atari  ST-s.  Az  OS/2-es  változatot  Kai  Uwe  Rommel  készítette  Darrel  Hankerson
       támogatásával és segítségével.  Fred Fish szolgáltatta az Amiga támogatást.

HIBAJELENTÉS

       Ha hibát találsz a gawk -ban, kérünk, küldj egy  e-mailt  a  bug-gnu-utils@prep.ai.mit.edu
       címre,  és  cc-zd  azt  az  arnold@gnu.ai.mit.edu  -hoz.  Kérünk,  mellékeld  az operációs
       rendszered nevét és verziószámát, a gawk verziószámát, hogy milyen C fordítót használtál a
       fordításához, és egy minél kisebb tesztprogramot és adatsort a probléma reprodukálásához.

       Mielőtt  hibajalentést küldenél, kérünk, tégy meg két dolgot.  Először: ellenőrizd, hogy a
       gawk legújabb verziója van-e meg. Sok hiba (rendszerint  hajszálnyiak)  kerül  kijavításra
       minden  verzióban,  és  ha  a  tiéd  elavult,  lehet,  hogy  a  problémát már megoldották.
       Másodszor: olvasd el figyelmesen a man lapot és a referenciakönyvet,  hogy  megbizonyosodj
       róla,  hogy  amit  hibának  gondolsz  az valóban hiba, és nem csak egy hirtelen fordulat a
       nyelvben.

       Bármit is  teszel,  NE  küldj  hibajalantést  a  comp.lang.awk  címre.   Jóllehet  a  gawk
       fejlesztői  alkalmanként  olvassák  ezt  a  hírcsoportot,  a  hibajelentések oda postázása
       megbízhatatlan módja a hibajelentésnek.  Ehelyett, kérünk, használd a fent megadott e-mail
       címeket.

KÖSZÖNETNYILVÁNÍTÁS

       A  Bell  Labsnél  dolgozó  Brian  Kernighan  értékes  segítséget  nyújtott  a tesztelés és
       hibajavítás alatt. Köszönjük neki.

MÁSOLÁSI JOGOK

       Copyright ©) 1996 Free Software Foundation, Inc.

       Mindenki számára engedélyezzük, hogy teljes másolatot készítsenek és terjesszenek erről az
       iratról,  azzal  a  kikötéssel,  hogy  a copyright megjegyzés és ez az engedély fel legyen
       tüntetve minden másolaton.

       Engedélyezzük, hogy ezen irat megváltoztatott verzióit másolják és terjesszék -  a  teljes
       másolatra  vonatkozó  kikötéssel  -  ,  feltéve,  hogy a teljes leszármazott munka ezzel a
       copyright megjegyzéssel megegyező engedélyekkel bírjon.

       Engedélyezzük ennek az iratnak más nyelvre történt fordításának másolását és  terjesztését
       a  fenti feltételek szerint, azzal a különbséggel, hogy ezt az engedélyező megjegyzést - a
       Free Software Foundation által elfogadott - fordításban is lehet közölni.

MAGYAR FORDÍTÁS

       Gombai Sándor  <sgombai@hotmail.com>