Provided by: manpages-hu_20010119-6_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>

Free Software Foundation                           Dec 19 1996                                           GAWK(1)