table of contents
- NÉV
- ÁTTEKINTÉS
- LEÍRÁS
- OPCIÓFORMÁTUM
- OPCIÓK
- AZ AWK PROGRAM VÉGREHAJTÁSA
- VÁLTOZÓK, REKORDOK ÉS MEZŐK
- MINTÁK ÉS TEVÉKENYSÉGEK
- FÜGGVÉNYEK
- PÉLDÁK
- LÁSD MÉG
- POSIX KOMPATIBILITÁS
- GNU BŐVÍTÉSEK
- TÖRTÉNELMI SZOLGÁLTATÁSOK
- KÖRNYEZETI VÁLTOZÓK
- HIBÁK
- VERZIÓ
- SZERZŐK
- HIBAJELENTÉS
- KÖSZÖNETNYILVÁNÍTÁS
- MÁSOLÁSI JOGOK
- MAGYAR FORDÍTÁS
GAWK(1) | Utility Commands | GAWK(1) |
NÉV¶
gawk - mintakereső és -feldolgozó nyelvÁTTEKINTÉS¶
gawk [ POSIX vagy GNU stílusú opciók ] -f program-file [ -- ] 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.
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]
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. ÍgyCONVFMT = "%2.2f" a = 12 b = a ""
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
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.
- \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.
- [: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.
- 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.
- 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.
- 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.
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.
- -
- 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.
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.
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.
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) ; ... }
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.
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>Dec 19 1996 | Free Software Foundation |