Linux repositories inspector
Free Software Foundation
Dec 19 1996
Aliases: awk(1), awk(1), awk(1), awk(1), awk(1), awk(1)

manpages-hu

Hungarian manpages

gawk

GNU awk, a pattern scanning and processing language

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:
o a \x escape szekvenciákat nem ismeri fel.
o 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.
o A function kulcsszó func szinonímáját nem ismeri fel.
o A ** és a **= operátor nem használható a ^ és a ^= helyén.
o 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:
o A \x escape szekvencia. (A --posix kikapcsolja).
o Az fflush() függvény. (A --posix kikapcsolja).
o A systime(), strftime() és gensub() függvények.
o A bemeneti/kimeneti átirányításra használt különleges fájlneveket nem ismeri fel.
o Az ARGIND, ERRNO és RT változóknak nincs speciális jelentésük.
o Az IGNORECASE változó és annak mellékhatásai nem érhetõk el.
o A FIELDWIDTHS változó és a rögzített szélességû mezõdarabolás.
o Az RS változó reguláris kifejezésként való használata.
o Egyes karakterekre szétvágás az FS változó vagy a split() harmadik argumentumának üres karakterláncra állításával.
o 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.
o Az aktuális file feldolgozásának megszüntetésére használt nextfile utasítás.
o 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 címre, és cc-zd azt az -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 <>
⇧ Top