Ismerje meg a Linux parancsot - gawk

Név

gawk - minta letapogatás és feldolgozási nyelv

Szinopszis

gawk [POSIX vagy GNU stílusú opciók] -f programfájl [ - ] fájl ...
gawk [POSIX vagy GNU stílusú opciók] [ - ] program-szövegfájl ...

pgawk [POSIX vagy GNU stílusú opciók] -f programfájl [ - ] fájl ...
pgawk [POSIX vagy GNU stílusú opciók] [ - ] program-szövegfájl ...

Leírás

A Gawk az AWK programnyelv GNU Project megvalósítása. Megfelel a POSIX 1003.2 Command Language és Utilities szabvány nyelvének meghatározására. Ez a verzió az AWK programozási nyelvben , az Aho, a Kernighan és a Weinberger leírásán alapul, a UNIX awk System V Release 4 változatában található további jellemzőkkel. A Gawk újabb Bell Laboratories awk kiterjesztéseket és számos GNU-specifikus kiterjesztést is kínál.

A Pgawk a gawk profilkészítő változata. Ugyanúgy megegyezik a gawk-el , kivéve, hogy a programok lassabban futnak, és ha kész, akkor automatikusan létrehoz egy végrehajtási profilt az awkprof.out fájlban. Lásd az alábbi --profile opciót.

A parancssor az önmagát, az AWK program szövegét tartalmazza (ha nem a -f vagy --file opciókon keresztül érkezik), és az ARGC és az ARGV előre meghatározott AWK változókban elérhető értékeket.

Opció formátum

A Gawk opciók lehetnek hagyományos POSIX egybetűs opciók vagy GNU stílusú hosszú opciók. A POSIX opciók egyetlen `` - '' állományból indulnak, míg a hosszú opciók a `` - '' gombbal kezdődnek. Hosszú lehetőségek állnak rendelkezésre mind a GNU-specifikus funkciók, mind a POSIX által megbízott szolgáltatások számára.

A POSIX szabványnak megfelelően a gawk -specifikus opciókat a -W opcióval érkezik. Több -W opció megadható Minden -W opciónak megfelelő hosszú opció van, az alábbiak szerint. A hosszú opciók argumentumait vagy egy opcióval csatoljuk egy = jelhez, nincs beavatkozó szóköz, vagy a következő parancssori argumentumban adhatók meg. A hosszú opciók rövidíthetők, mindaddig, amíg a rövidítés egyedülálló marad.

Lehetőségek

A Gawk a következő opciókat fogadja el betűrendben.

-F fs

--field-separator fs Használja az fs- et a beviteli mező szeparátorhoz (az FS előre definiált változó értéke).

-v var = val

--assign var = val Adja meg a val értéket a vari változóra, mielőtt a program végrehajtása megkezdődik. Az ilyen változóértékek rendelkezésre állnak az AWK program BEGIN blokkjára.

-f programfájl

- fájl programfájl Olvassa el az AWK programforrást a fájl programfájlból az első parancssori argumentum helyett. Többféle -f (vagy -file ) opció használható.

-mf NNN

-mr NNN Különféle memóriahatárokat állít be az NNN értékre. Az f jelző a mezők maximális számát állítja be, és az r flag a maximális rekordméretet állítja be. Ez a két zászló és az -m opció a UNIX awk Bell Laboratories kutatási verziójából származik. A gawk figyelmen kívül hagyja őket, mivel a gawknek nincs előre meghatározott határai.

-W kompat

-W hagyományos

--compat

--Traditional Run kompatibilitási módban. Kompatibilitási módban a gawk azonos módon viselkedik a UNIX awk-mal ; a GNU-specifikus kiterjesztések egyikét sem ismerik fel. A --traditional használatát előnyben részesítik a többi lehetőségnél. További információért olvassa el az alábbi GNU EXTENSIONS fejezetet .

-W copyleft

-W szerzői jog

--copyleft

--copyright A GNU szerzői jogi információ rövid verziójának nyomtatása a szabványos kimeneten és a sikeres kilépés.

-W dump-változók [ = fájl ]

--dump-variables [ = file ] A globális változók, azok típusainak és végső értékeinek rendezett listájának kinyomtatása fájlba . Ha nincs megadva fájl , a gawk az aktuális könyvtárban egy awkvars.out nevű fájlt használ.

Az összes globális változó listája jó módja annak, hogy nyomdai hibákat keressen a programokban. Ezt az opciót is használni fogod, ha nagy programod van, és sok funkcióval rendelkezik, és biztos akar lenni abban, hogy a funkciók nem véletlenül olyan globális változókat használnak, amelyeket helyinek neveztek. (Ez egy különösen egyszerű hiba az egyszerű változó nevekkel, mint például i , j stb.).

-W segítséget

-W használat

--Segítség

--usage Nyomtassa ki a rendelkezésre álló opciók viszonylag rövid összefoglalását a szabvány kimeneten. (A GNU kódolási szabványok szerint ezek a lehetőségek azonnali, sikeres kilépést okoznak.)

-W lint [ = halálos ]

--lint [ = halálos ] Adjon figyelmeztetéseket az olyan konstrukciókra, amelyek kétes vagy nem hordozhatók az egyéb AWK implementációkhoz. A halálos , szálas figyelmeztetések opcionális vitájával végzetes hibák léphetnek fel. Ez drasztikus lehet, de használata biztosan ösztönözni fogja a tisztább AWK-programok kidolgozását.

-W szőrös

- régi-régi Figyelmeztetések olyan konstrukciókról, amelyek nem hordozhatók az Unix awk eredeti verziójához.

-W gen-po

--gen-po Szkennelje és elemezze az AWK programot, és generáljon egy GNU .po formátumú fájlt a szabványos kimeneten, és beírja a program összes lokalizálható karakterláncát. A program nem kerül végrehajtásra. A .po fájlokra vonatkozó további információkért lásd a GNU gettext- eloszlást.

-W nem tizedes adat

--nem decimális adatok Felismerik az oktális és a hexadecimális értékeket a bemeneti adatokban. Használja ezt az opciót óvatosan!

-W posix

--posix Ez a kompatibilitási módot kapcsolja be a következő korlátozásokkal:

*

A \ x escape szekvenciákat nem ismeri fel.

*

Csak az űr és a lap működik terepi elválasztóként, ha az FS egy helyre van állítva, az újsor nem.

*

Nem tudja folytatni a vonalakat ? és :.

*

A kulcsszó funkció funkció szinonimája nem ismert.

*

A ** és ** = operátorok nem használhatók a ^ és ^ = helyett.

*

Az fflush () függvény nem áll rendelkezésre.

-W profil [ = prof_file ]

--profile [ = prof_file ] Küldje profiladatokat a prof_file-be . Az alapértelmezés az awkprof.out . Ha gawk-el futtatja, a profil csak egy program "` szép nyomtatott '' változata. Amikor a pgawk- t futtatja , a profil tartalmazza a bal oldali margóban lévő program minden egyes utasításának végrehajtási számát, valamint minden egyes felhasználó által definiált függvény hívásszámlálását .

-W újraintervallum

--re-interval Engedélyezheti az intervallum kifejezések használatát a szabályos kifejezésegyezésben (lásd: Az alább felsorolt szabályos kifejezések ). Az intervallum kifejezései hagyományosan nem álltak rendelkezésre az AWK nyelvben. A POSIX szabvány hozzáadta őket, hogy az awk és a egrep konzisztensek legyenek egymással. Használata azonban valószínűleg megtöri a régi AWK programokat, így a gawk csak akkor biztosítja őket, ha ezt az opciót kérték, vagy amikor a --poszert megadják .

-W forrás program-szöveg

--source program-text Használja a program-szöveget AWK programforráskódként. Ez az opció lehetővé teszi a könyvtári funkciók egyszerű összekeverését (a -f és --file opciókon keresztül) a parancssorba beírt forráskóddal. Ez elsősorban közepes és nagy méretű AWK programokra vonatkozik, amelyeket a shell scriptekben használnak.

-W változat

--version A gawk ezen egyedi példányának nyomtatási verziószáma a szabványos kimeneten. Ez elsősorban annak tudatában van, hogy a rendszeren futó gawk aktuális példánya naprakész-e a Free Software Foundation által forgalmazott formában. Ez a hibák bejelentésekor is hasznos. (A GNU kódolási szabványok szerint ezek a lehetőségek azonnali, sikeres kilépést okoznak.)

- Jelölje meg a lehetőségek végét. Ez azért hasznos, hogy további érveket adjon az AWK programnak, hogy "- -" -al kezdjen. Ez főként a legtöbb POSIX program által használt érveléselemző egyezménnyel összhangban áll.

Kompatibilitási módban minden egyéb opció érvénytelen, de egyébként figyelmen kívül marad. Normál üzemeléskor mindaddig, amíg a program szövegét megadta, az ARGV- tömb AWK programjára továbbítanak ismeretlen opciókat a feldolgozáshoz. Ez különösen hasznos az AWK programok futtatásához a `` #! '' Futtatható értelmező mechanizmuson keresztül.

AWK PROGRAM EXECUTION

Az AWK program a minta-cselekvési utasítások és az opcionális függvénydefiníciók sorozatából áll.

mintázat { fellépések }

függvény neve ( paraméterlista ) { utasítások }

A Gawk először elolvassa a programforrást a programfájl (ok) ból, ha meg van adva, az argumentumokról a --source-ra , vagy a parancssor első nem opcionális argumentumáról. A -f és - source opciók többször is használhatók a parancssorban. Gawk elolvassa a program szövegét, mintha az összes programfájl és a parancssor forrásszövegei össze lettek volna összefűzve. Ez hasznos az AWK funkciók könyvtárainak felépítéséhez, anélkül, hogy azokat minden új AWK programba be kellene építenie, amely ezeket használja. Ezenkívül lehetővé teszi a könyvtári funkciók és a parancssori programok összekeverését.

Az AWKPATH környezeti változó egy keresési útvonalat határoz meg, amelyet a -f beállítással megadott forrásfájlok megtalálásához használ. Ha ez a változó nem létezik, az alapértelmezett elérési út ".: / Usr / local / share / awk" . (A tényleges könyvtár változhat, attól függően, hogy a gawk- t hogyan építették és telepítették.) Ha az -f opcióhoz adott fájlnév `` / '' karaktert tartalmaz, akkor nincs útkeresés.

A Gawk AWK programokat a következő sorrendben hajtja végre. Először a -v opcióval megadott összes változó hozzárendelést végezzük el. Ezt követõen a gawk a programot belsõ formává alakítja. Ezután a gawk végrehajtja a kódot a BEGIN blokk (ok) ban (ha van), majd folytatja az ARGV tömbben megadott összes fájlt. Ha a parancssorban nincsenek megnevezések, a gawk elolvassa a standard bemenetet.

Ha a parancssoron lévő fájlnév formája var = val, akkor változó hozzárendelésként kezelendő. A var változót a val értékhez rendelik. (Ez történik minden BEGIN blokk (ok) futtatása után.) A parancssori változók hozzárendelése leginkább az értékek dinamikus hozzárendeléséhez használható az AWK által használt változókhoz annak ellenőrzésére, hogy a bevitelt mezőkre és rekordokra osztják-e. Hasznos az állapotszabályozáshoz is, ha több adatfolyam szükséges egy adatfájl fölött.

Ha az ARGV adott elemének értéke üres ( "" ), akkor a gawk átugrik rajta.

A bemenet minden egyes rekordja esetében a gawk ellenőrzi , hogy megfelel-e az AWK program minden mintájához . Minden egyes minta, amelyen a rekord egyezik, a kapcsolódó művelet végrehajtásra kerül. A mintákat a sorrendben tesztelik a programban.

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

Változók, rekordok és mezők

Az AWK változók dinamikusak; amikor először használják őket. Értékeik lebegőpontos számok vagy karakterláncok, vagy mindkettő, attól függően, hogy hogyan használják őket. Az AWK egydimenziós tömböket is tartalmaz; többdimenziós tömbök szimulálhatók. Számos előre definiált változó van programozva; ezeket szükség szerint írják le és az alábbiakban összefoglalják.

Records

Általában a rekordokat új sor karakterek választják el. Meghatározhatja, hogy a rekordok elválaszthatók legyenek, hozzárendelve az RS beépített változóhoz tartozó értékeket. Ha az RS egyetlen karakter, akkor a karakter elválasztja a rekordokat. Ellenkező esetben az RS szabályos kifejezés. A beviteli szöveg, amely megfelel ennek a szabályos kifejezésnek, elválasztja a rekordot. Kompatibilitási módban azonban csak a karakterlánc első karakterét használják a rekordok elválasztására. Ha az RS az null karakterre van állítva, akkor a rekordokat üres sorok választják el. Ha az RS az null karakterláncra van állítva, akkor az újsor karakter mindig mezőelválasztóként működik, az FS bármilyen értékén felül.

Fields

Ahogy minden egyes bemeneti adat olvasható, a gawk a rekordot mezőkre osztja, az FS változó értéke mezőelválasztóként. Ha az FS egy karakter, a mezőket e karakter választja el. Ha az FS az null karakterlánc, akkor minden egyes karakter egy külön mező lesz. Egyébként az FS várhatóan teljes szabályos kifejezés. Abban az esetben, ha az FS egy üres hely, a mezőket terek és / vagy lapok és / vagy új sorok futják el egymástól. (De nézd meg az alábbiakban található --posztert ). MEGJEGYZÉS: Az IGNORECASE értéke (lásd alább) azt is befolyásolja, hogy a mezők mikor oszlanak meg, amikor az FS rendszeres kifejezés, és hogy mikor vannak feljegyzések, amikor az RS rendszeres kifejezés.

Ha a FIELDWIDTHS változó a számok szétválasztott listájára van állítva, minden mező várhatóan fix szélességű lesz, és a gawk a rekordot a megadott szélességek alapján osztja fel. Az FS értékét figyelmen kívül hagyja. Az FS új értékének hozzárendelése felülírja a FIELDWIDTHS használatát, és visszaállítja az alapértelmezett viselkedést.

A beviteli rekord minden mezőjét hivatkozhatja a pozíciója, $ 1 , $ 2 , és így tovább. $ 0 az egész rekord. A mezőket nem kell hivatkozni a konstansokkal:

n = 5
print $ n

kinyomtatja az ötödik mezőt a bemeneti rekordban.

Az NF változó a bemeneti rekord összes mezőjéhez van beállítva.

A nem létező mezőkre (vagyis az $ NF után kezdődő mezőkre) hivatkoznak a null-stringre. Azonban a nem létező mező (pl. $ (NF + 2) = 5 ) hozzárendelése növeli az NF értékét, minden értéket hozzáadva a null karakterláncot, és a $ 0 értéket újraértékeli. a mezőket az OFS értéke választja el. A negatív számozott mezőkre vonatkozó hivatkozások végzetes hibát okoznak. Az NF csökkentése okozza az új érték múltán lévő mezők értékeinek elvesztését, és a $ 0 értéket újratervezni, a mezőket pedig az OFS értéke választja el.

Egy érték hozzárendelése egy meglévő mezőhöz az egész rekord újjáépítését eredményezi, amikor 0 dollárra hivatkozunk. Hasonlóképpen, az érték 0-ra történő hozzárendelése miatt a rekord újracsatlakoztatásához új értékeket hoz létre a mezők számára.

Beépített változók

Gawk beépített változói:

ARGC

A parancssori argumentumok száma (nem tartalmazza a gawk vagy a programforrás beállításait).

ARGIND

A folyamatban lévő fájl ARGV-indexe .

ARGV

A parancssori érvek metszete. A tömb indexelése 0-tól ARGC- 1-ig történik . Az ARGV tartalmának dinamikus megváltoztatása vezérelheti az adatokhoz használt fájlokat.

BINMODE

A nem POSIX rendszereken a `bináris 'mód használatát határozza meg az összes I / O fájl számára. Az 1, 2 vagy 3 numerikus értékek meghatározzák, hogy a bemeneti fájlok, a kimeneti fájlok vagy az összes fájlnak bináris I / O-nak kell lennie. Az "r" vagy a "w" karakterláncok meghatározzák, hogy a bemeneti fájlok vagy kimeneti fájlok bináris I / O-ként használhatók. Az "rw" vagy a "wr" karakterláncok meghatározzák, hogy minden fájlnak bináris I / O-t kell használnia. Minden egyéb karakterlánc értékét "rw" -ként kezelik, de figyelmeztető üzenetet generál.

CONVFMT

Alapértelmezés szerint a "% .6g" számok konverziós formátuma.

ENVIRON

Az aktuális környezet értékeit tartalmazó tömb. A tömböt a környezeti változók indexelik, mivel mindegyik elem a változó értéke (pl. Az ENVIRON ["HOME"] lehet / home / arnold ). Ennek a tömbnek a megváltoztatása nem befolyásolja azokat a környezeteket, amelyeket a gawk átirányítással vagy a rendszer () függvény segítségével ismeri.

ERRNO

Ha rendszerhiba következik be vagy a getline átirányítás, a getline olvasás közben vagy a close () alatt , akkor az ERRNO tartalmaz egy hibát leíró karakterláncot. Az érték nem angol nyelvű fordítással érhető el.

FIELDWIDTHS

A terepi kiterjedésű terepen elkülönített lista. Amikor be van állítva, a gawk a bemenetet a fix szélességű mezőkre bonálja, ahelyett, hogy az FS változó értékét mezőelválasztóként használja.

FÁJL NÉV

Az aktuális bemeneti fájl neve. Ha a parancssor nem tartalmaz fájlokat, a FILENAME értéke `` - ''. A FILENAME azonban nincs meghatározva a BEGIN blokk belsejében (hacsak nincs megadva a getline ).

FNR

A beviteli rekord száma az aktuális bemeneti fájlban.

FS

A beviteli mező szétválasztója alapértelmezés szerint egy szóközt. Lásd a fenti mezőket .

IGNORECASE

Az összes szabályos kifejezés és a karakterlánc műveleteinek esetleges érzékenységét szabályozza. Ha az IGNORECASE nem nulla értékű, akkor a string-összehasonlítások és a minták illesztése a szabályokban, az FS-vel való szétválasztás, RS- vel elválasztó rekord, a ~ és ! ~ És a gensub () , gsub () , index , a match () , a split () és a sub () beépített függvények mindegyike figyelmen kívül hagyja az esetet a rendszeres kifejezés műveletek során. MEGJEGYZÉS: Az array indexelés nem érintett, és nem az asort () függvény.

Így, ha az IGNORECASE nem nulla, akkor a / aB / az összes "ab" , "aB" , "AB" és "AB" karakterláncnak felel meg. Mint minden AWK változó esetében, az IGNORECASE kezdeti értéke nulla, ezért a rendszeres kifejezés és a sztring műveletek általában kis- és nagybetűkre érzékenyek. A Unix alatt a teljes ISO 8859-1 latin-1 karakterkészletet használjuk az eset figyelmen kívül hagyása során.

LINT

Dinamikusan vezérli a --lint lehetőséget az AWK programon belül. Ha igaz, a gawk szalag figyelmeztetéseket nyomtat. Ha hamis, akkor nem. Amikor a "halálos" karakterlánc értékét hozzárendeli, a szöszi figyelmeztetések végzetes hibákká válnak, pontosan mint a --lint = végzetes . Minden más valódi érték csak figyelmeztetést nyomtat.

NF

Az aktuális bemeneti rekord mezők száma.

NR

Az eddig feljegyzett bemeneti feljegyzések száma.

OFMT

A számok kimeneti formátuma alapértelmezés szerint "% .6g" .

OFS

A kimeneti mező szeparátor, alapértelmezés szerint egy szóköz.

ORS

A kimeneti rekordelválasztó alapértelmezés szerint új sor.

procinfo

Ennek a tömbnek az elemei hozzáférést biztosítanak a futó AWK program információihoz. Néhány rendszeren létezhetnek elemek a tömbben, "csoport1" az " n csoport " számára n n számára , amely a folyamatban lévő kiegészítő csoportok számát jelenti. Használja az in operátort, hogy tesztelje ezeket az elemeket. A következő elemek garantáltan rendelkezésre állnak:

Procinfo [ "egid"]

a getegid (2) rendszerhívás értéke.

Procinfo [ "euid"]

a geteuid (2) rendszerhívás értéke.

Procinfo [ "FS"]

"FS", ha az FS-vel való szétválasztás érvényben van, vagy "FIELDWIDTHS", ha a FIELDWIDTHS-szel történő szétválasztás érvényben van.

Procinfo [ "gid"]

a getgid (2) rendszerhívás értéke.

Procinfo [ "pgrpid"]

az aktuális folyamat folyamatcsoport azonosítója.

Procinfo [ "PID"]

az aktuális folyamat folyamatazonosítója.

Procinfo [ "PPID"]

a jelenlegi folyamat szülő folyamatazonosítója.

Procinfo [ "UID"]

a getuid (2) rendszerhívás értéke.

RS

A bemeneti rekordelválasztó alapértelmezés szerint új sor.

RT

A rekord terminátor. Gawk RT- t állít be a bevitt szöveghez, amely megfelel az RS által meghatározott karakternek vagy szabályos kifejezésnek.

RSTART

Az első karakter indexe a mérkőzés () függvényében; 0, ha nincs egyezés. (Ez azt jelenti, hogy a karakterindexek egyenként indulnak.)

RLENGTH

A húr hossza a mérkőzésen () ; -1 ha nincs egyezés.

SUBSEP

A több algoritmus tömbelemekben való elkülönítésére használt karakter, alapértelmezés szerint "\ 034" .

textdomain

Az AWK program szöveges területe; a program húrjainak lokalizált fordításainak megtalálására szolgál.

tömbök

A rétegek alul vannak indexelve a szögletes zárójelek között ( [ és ] ). Ha a kifejezés egy kifejezéslista ( expr , expr ...), akkor a tömbindex egy olyan string, amely az egyes kifejezések (string) értékének összekapcsolásával, a SUBSEP változó értékével elválasztva. Ez a lehetőség többszörös méretű tömbök szimulálására szolgál. Például:

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

a "hello, world \ n" stringet hozzárendeli az x tömb eleméhez, amelyet az "A \ 034B \ 034C" karakterlánc indexál . Az AWK összes tömbje asszociatív, vagyis string értékekkel indexelve.

A speciális operátort használhatjuk az if or while utasításban annak megvizsgálására, hogy egy tömb rendelkezik-e egy adott értékből álló indexel.

ha (val in array) nyomtatási tömb [val]

Ha a tömb több indexet tartalmaz, használjon (i, j) a tömbben .

Az in konstrukciót is használhatjuk a for loop-ban, hogy iterátáljunk egy tömb minden elemén.

Egy elem törölhető egy tömbből a törlési utasítással. A törlési utasítás arra is használható, hogy törölje a tömb teljes tartalmát, csak a tömb nevének megadása nélkül.

Változó gépelés és konverzió

A változók és mezők lehetnek (lebegőpontos) számok, vagy húrok, vagy mindkettő. A változó értékének értelmezése függ a kontextustól. Ha numerikus kifejezésben használjuk, akkor számként kezeljük, ha stringként használjuk, akkor stringként kezeljük.

Ahhoz, hogy a változó számként kezelhető legyen, add hozzá 0-t; hogy azt stringként kezeljük, összekapcsoljuk a null karakterrel.

Ha egy karakterláncot számká kell alakítani, a konverzió a strtod (3) segítségével történik. Egy számot string-ként konvertálnak a CONVFMT formátumának a sprintf (3) formátum-string-ként történő használatával , a változó numerikus értékével pedig argumentumként. Annak ellenére, hogy az összes AWK szám lebegőpontos, az integrált értékek mindig egész számokká alakulnak. Így adott

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

a b változónak "12" és nem "12.00" string értékűnek kell lennie .

A Gawk az alábbi összehasonlításokat hajtja végre: Ha két változó számszerű, számszerűen hasonlítanak össze. Ha egy érték numerikus, a másiknak string értéke van, ami egy `` numerikus karakterlánc '', akkor az összehasonlításokat is numerikusan végezzük. Ellenkező esetben a számérték átalakul egy karakterláncba, és a karakterláncok összehasonlítása megtörténik. Két sztringet hasonlítanak össze, természetesen, mint húrok. Megjegyezzük, hogy a POSIX szabvány a "numerikus karakterlánc" fogalmát alkalmazza mindenhol, még a string konstansoknak is. Ez azonban nyilvánvalóan helytelen, és a gawk ezt nem teszi meg. (Szerencsére ezt a szabvány következő verziójában rögzítettük.)

Ne feledje, hogy a string konstansok, például az "57" , nem numerikus karakterláncok, hanem húr konstansok. A "numerikus karakterlánc" fogalma csak a mezőkre, a getline bemenetre, a FILENAME , az ARGV elemekre, az ENVIRON elemekre és a split () által létrehozott tömb elemekre vonatkozik, amelyek számsor karakterek. Az alapötlet az, hogy a felhasználói bemenetet , és csak a numerikusnak látszó felhasználói bevitelt kell kezelni.

A nem inicializált változók 0-as numerikus értéket és a "" (null, vagy empty, string) string értéket tartalmaznak.

Oktális és hexadecimális konstansok

A gawk 3.1-es verziójától kezdve C-stílusú oktális és hexadecimális állandókat használhat AWK program forráskódjában. Például a 011 oktális érték megegyezik a decimális 9 értékkel, és a hexadecimális érték 0x11 egyenlő a decimális 17 értékkel.

Vonós konstansok

Az AWK karakterlánc-konstansjai a kettős idézőjelek közé ( "" ) bezárt karakterek sorozata. A karakterláncokon belül bizonyos escape szekvenciákat ismerünk el, mint a C-ban. Ezek a következők:

\\

A szó szoros értelmében.

\ a

A "figyelmeztető" karakter; általában az ASCII BEL karakter.

\ b

backspace.

\ f

lapdobás.

\ n

új sor.

\ r

kocsi vissza.

\ t

vízszintes fül.

\ v

függőleges lap.

\ x hex számjegyek

Az a karakter, amelyet a hexadecimális számjegyek a \ x . Az ANSIC-hoz hasonlóan az összes hexadecimális számjegy a menekülési sorrend részét képezi. (Ez a funkció megmondja nekünk a nyelvi tervezést a bizottságban.) Pl. "\ X1B" az ASCIIESC (escape) karakter.

\ ddd

Az 1-es, 2-es vagy 3-jegyű oktális számjegyek által képviselt karakter. Pl .: "\ 033" az ASCII ESC (escape) karakter.

\ c

C) szó szerinti karakter c .

A menekülési szekvenciák állandó szabályos kifejezéseken belül is használhatók (pl. / [\ T \ f \ n \ r \ v] / illeszkedik a fehérek karakterekhez).

Kompatibilitási módban az oktális és a hexadecimális escape szekvenciák által képviselt karaktereket szó szerint szabályozzák, ha rendszeres expressziós állandókban használják őket. Így / a \ 52b / ekvivalens / a \ * b / .

Minták és műveletek

Az AWK egy lineáris nyelv. A minta előbb jön, majd a cselekvés. A cselekvési nyilatkozatok a { és } lapon vannak. Lehet, hogy a mintázat hiányzik, vagy hiányzik a cselekvés, de természetesen nem mindkettő. Ha a minta hiányzik, akkor a művelet végrehajtásra kerül minden bemeneti adatbázishoz. A hiányzó cselekvés egyenértékű

{print}

amely az egész rekordot kinyomtatja.

A megjegyzések a `` # '' karakterrel kezdődnek, és a sor végéig folytatódnak. Üres vonalak használhatók a kijelentések elválasztására. Általában egy nyilatkozat egy új sorral végződik, azonban ez nem áll fenn a "`, '', { , ? ,,, && , vagy || . A sorban befejeződő sorok vagy a következő sorban is folytatódnak állításai. Más esetekben egy sort folytathat úgy, hogy befejezte egy '' -vel, ez esetben az új sort figyelmen kívül hagyják.

Többszöri állításokat lehet elhelyezni egy sorra, elválasztva őket egy ``; ''. Ez mind a mintázat-cselekvési párt (a szokásos eset) cselekvési részében, mind a mintázat-cselekvési nyilatkozatokban érvényes.

minták

Az AWK minták a következők egyike lehetnek:

BEGIN END / reguláris kifejezés / relációs kifejezésmintázat && minta minta || minta minta ? minta : minta ( minta ) ! mintázat1 , mintázat2

A BEGIN és az END két különféle mintázat, amelyet nem teszteltek a bemenet ellen. Az összes BEGIN- mintázat cselekvési része összevonásra kerül, mintha minden állítás egyetlen BEGIN blokkban lett volna írva. Ezek végrehajtása a bemenet bármelyikének olvasása előtt történik. Hasonlóképpen, az összes END blokk összevonódik, és végrehajtódik, ha az összes bemenet kimerült (vagy amikor kilépési utasítás végrehajtásra kerül). A BEGIN és az END minták nem kombinálhatók más mintákkal a minta kifejezésben. A BEGIN és az END minták nem tartalmazhatnak hiányzó akcióelemeket.

A / regular expression / mintákhoz a kapcsolódó utasítás minden olyan bemeneti rekordra érvényes, amely megfelel a szabályos kifejezésnek. A reguláris kifejezések ugyanazok, mint az egrep (1), és az alábbiakban foglalhatók össze.

A relációs kifejezés az alábbiakban meghatározott műveletek bármelyikét használhatja az akciókban. Ezek általában azt vizsgálják, hogy bizonyos mezők megfelelnek-e bizonyos szabályos kifejezéseknek.

A && , || , és ! a műveletek logikusak ÉS, logikaiak és logikusak NEM, mint a C-ban. Rövidzárlatos értékelést végeznek, mint a C-ban is, és több primitív mintázati kifejezés kombinálására használják. Mint a legtöbb nyelven, zárójelek is használhatók az értékelés sorrendjének megváltoztatására.

A ?: Operátor ugyanolyan operátor a C-ban. Ha az első mintázat igaz, akkor a teszteléshez használt minta a második mintázat, ellenkező esetben a harmadik. Csak a második és a harmadik minták egyikét értékelik.

A kifejezés pattern1 , pattern2 formáját tartománymintának nevezik. Minden bemeneti rekordot egy olyan rekordmal kezdődik, amely egyezik a mintával1 , és addig folytatódik, amíg egy olyan rekord, amely megfelel a mintának2 . Nem kapcsolódik semmilyen másfajta mintázat kifejezéshez.

Rendszeres kifejezések

A szabályos kifejezések az egrep-ben található kiterjesztett fajta. Ezek a következő karakterekből állnak:

c

megfelel a nem metakaraktert c .

\ c

megegyezik a szó szerinti karakterrel c .

.

megfelel bármilyen karakternek, beleértve az újvonalat is.

^

megegyezik egy string kezdetével.

$

megegyezik egy karakterlánc végeivel.

[ abc ... ]

karakterlista, megegyezik az abc karakterek bármelyikével ....

[^ abc ... ]

negatív karakterlista, minden karaktert megegyezik az abc ... kivételével.

r1 | r2

váltakozás: megegyezik az r1 vagy r2 értékekkel .

R1R2

összefűzés: egyezik az r1-vel , majd az r2-vel .

r +

egy vagy több r-nek felel meg.

r *

nulla vagy több r-nek felel meg.

r ?

nulla vagy egy r-nek felel meg.

( r )

csoportosítás: mérkőzések r .

r { n }

r { n ,}

r { n , m } Egy vagy két szám a zárójelben belül egy intervallum kifejezést jelez. Ha van egy szám a zárójelben, az előző szabályos kifejezés r ismétlődik n alkalommal. Ha két szám vesszővel van elválasztva, r ismétlődik n- től m-ig . Ha van egy szám, amelyet vessző követ, akkor r ismétlődik legalább n alkalommal.

Az intervallum kifejezései csak akkor érhetők el, ha a parancssorban a --posix vagy a --re-interval érték szerepel.

\ y

illeszkedik az üres karakterlánchoz egy szó elején vagy végén.

\ B

megegyezik az üres karakterlánccal.

\ <

megegyezik az üres sorral a szó elején.

\>

illeszkedik az üres sorhoz egy szó végén.

\ w

illeszkedik bármely szóösszetevő karakterhez (betű, számjegy vagy aláhúzás).

\ W

megfelel minden olyan karakternek, amely nem word-constituent.

\ `

illeszkedik az üres sorhoz puffer (string) elején.

\ '

megegyezik az üres sorral a puffer végén.

A sztring konstansokban érvényes escape szekvenciák (lásd alább) szintén szabályos kifejezésekre érvényesek.

A karakterosztályok a POSIX szabvány új jellemzői. A karakterosztály egy speciális jelölés a meghatározott attribútumú karakterek listájának leírásához, de ahol a tényleges karakterek maguktól országonként és / vagy a karakterkészlettől a karakterkészletig változhatnak. Például az alfabetikus karakter fogalma különbözik az USA-ban és Franciaországban.

A karakterosztály csak egy szabályos kifejezésben érvényes a karakterlista zárójelein belül . A karakterosztályok [:: az osztályt jelző kulcsszó, és :] . A POSIX szabvány által meghatározott karakterosztályok a következők:

[: alnum:]

Alfanumerikus karakterek.

[: alpha:]

Alphabetical characters.

[:üres:]

Szóköz vagy lap karakterek.

[: cntrl:]

Vezérlő karakterek.

[:számjegy:]

Numerikus karakterek.

[:grafikon:]

Olyan karakterek, amelyek nyomtathatók és láthatóak. (A hely nyomtatható, de nem látható, míg egy a mindkettő.)

[:Alsó:]

Alsó betűs betűk.

[:nyomtatás:]

Nyomtatható karakterek (karakterek, amelyek nem vezérlő karakterek.)

[: punct:]

Írásjelek (karakterek, amelyek nem betű, számjegyek, vezérlõ karakterek vagy szóköz karakterek).

[:hely:]

Hely karakterek (például hely, lap és formfeed, néhányat említenek).

[:felső:]

Felsőbbrendű betűs karakterek.

[: xdigit:]

A hexadecimális számjegyek.

Például, mielőtt a POSIX szabványt, hogy megfeleljen az alfanumerikus karaktereknek, meg kellett volna írni / [A-Za-z0-9] / . Ha a karakterkészletben más ábécé karakterek is vannak, akkor ez nem egyezik meg velük, és ha a karakterkészlete eltér az ASCII-ből, ez esetleg nem egyezik meg az ASCII alfanumerikus karakterekkel. A POSIX karakterosztályokkal írhat / [[: alnum:]] / , és ez megegyezik a karakterkészletének betűkkel és numerikus karakterekkel.

Két további speciális sorozatot jeleníthet meg a karakterlistákban. Ezek a nem ASCII karakterkészletekre vonatkoznak, amelyek egynél több karakterrel jelölt szimbólumokat (úgynevezett gyűjtőelemeket) tartalmazhatnak , valamint több olyan karakter is, amelyek egyenértékűek az összeállításhoz vagy a rendezéshez. (Pl. Francia, sima "` e "" és súlyos ékezetes e "egyenértékű).

A szimbólumok összegyűjtése

A gyűjtő szimbólum egy többkarakteres összeillesztési elem, amelyet [. és .] . Például, ha ch egy összeállítási elem, akkor [[.ch.]] Egy szabályos kifejezés, amely megfelel ennek a gyűjtőelemnek, míg a [ch] egy szabályos kifejezés, amely megfelel a c vagy h értékeknek .

Egyenértékűségi osztályok

Az ekvivalenciaosztály a helyspecifikus név az azonos karakterek listájához. A név be van zárva [= and =] -ban . Például az e név használható az "e", "e", "" és "" e "kifejezésekre. '' Ebben az esetben a [[= e =]] megfelel az e , e ' vagy e' bármelyiknek.

Ezek a funkciók nagyon értékesek a nem angol nyelvű helyeken. Az a könyvtár, amelyet a gawk a szabályos kifejezésegyezéshez használ, jelenleg csak a POSIX karakterosztályokat ismeri fel; nem ismerik fel a szimbólumokat vagy egyenértékűségi osztályokat.

Az \ y , \ B , \ < , \> , \ w , \ W , \ ` és \ ' operátorok a gawk-re specifikusak; ezek a GNU rendszeres kifejezéskönyvtárakban található létesítményeken alapuló kiterjesztések.

A különféle parancssori opciók azt szabályozzák, hogy a gawk a karaktereket szabályos kifejezésekben értelmezi-e.

Nincs lehetőség

Az alapértelmezett esetben a gawk biztosítja a POSIX szabályos kifejezések és a fent leírt GNU szabályos kifejezés operátorok összes szolgáltatását. Az intervallum kifejezései azonban nem támogatottak.

--posix

Csak POSIX szabályos kifejezések támogatottak, a GNU operátorok nem különösebben. (Például, \ w egy literes w-vel egyezik). Az intervallum kifejezései megengedettek.

--hagyományos

A hagyományos Unix awk szabályos kifejezések illeszkednek. A GNU-operátorok nem speciálisak, az intervallum kifejezések nem állnak rendelkezésre, és sem a POSIX karakterosztályok ( [[: alnum:]] stb. Az oktális és a hexadecimális escape szekvenciák által leírt karaktereket szó szerint értelmezzük, még akkor is, ha azok rendszeres metakaraktert jelentenek.

--re-intervallum

Engedélyezzen intervallumkifejezéseket a szabályos kifejezésekben, még akkor is, ha a "hagyományos" kifejezést megadták.

Hozzászólások

A cselekvési nyilatkozatok zárójelben vannak, { és } . A cselekvési állítások a szokásos hozzárendelési, feltételes és hurkolt utasításokat tartalmazzák a legtöbb nyelven. A rendelkezésre álló operátorok, ellenőrző utasítások és bemeneti / kimeneti állítások a C-ben szereplő felhasználók után vannak mintázva.

Az üzemeltetők

Az AWK üzemeltetői, a csökkenő elsőbbségi sorrend szerint

( ... )

Csoportosítás

$

Mező hivatkozás.

++ -

Növekedés és csökkenés, mind előtag, mind postfix.

^

Kiválasztás ( ** is használható, és ** = a hozzárendelést végző operátor számára).

+ -!

Unary plus, egyenlőtlen mínusz és logikai negáció.

* /%

Szorzás, osztás és modulus.

+ -

Összeadás és kivonás.

hely

Szöveges összefonódás.

<>

<=> =

! = == A rendszeres relációs operátorok.

~! ~

Szabályos kifejezésegyezés, kizárt meccs. MEGJEGYZÉS: Ne használj állandó szabályos kifejezést ( / foo / ) a ~ vagy ! ~ Bal oldalán. Csak egyet használjon a jobb oldalon. A / foo / ~ exp kifejezés jelentése ugyanúgy, mint (($ 0 ~ / foo /) ~ exp ) . Ez általában nem az, amit terveztek.

ban ben

Array tagság.

&&

Logikai ÉS.

||

Logikai VAGY.

?:

A C feltételes kifejezés. Ez a forma expr1 ? expr2 : expr3 . Ha az expr1 igaz, a kifejezés értéke expr2 , ellenkező esetben expr3 . Csak az expr2 és az expr3 értékeket értékeljük.

= + = - =

* = / =% = ^ = Hozzárendelés. Mind az abszolút hozzárendelés ( var = érték ), mind az operátor-hozzárendelés (a többi formában) támogatott.

Ellenőrzési nyilatkozatok

Az ellenőrző utasítások a következők:

ha a ( condition ) utasítás [ egyéb utasítás ], míg a ( condition ) utasítás a statement ( állapot ) kifejezést ( expr1 ; expr2 ; expr3 ) a ( var a tömbben ) utasításban szünet folytatja törli a tömböt [ index ] delete array exit [ kifejezés ] nyilatkozatok }

I / O nyilatkozatok

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

bezár ( fájl [ , hogyan ] )

Zárja be a fájlt, a csövet vagy az együttes eljárást. Az opcionális módon, hogyan kell használni, ha a kétirányú cső egyik végét egy párhuzamos folyamatba zárja. Szövegértéknek kell lennie, vagy "a" vagy "a" .

getline

Állítson $ 0-t a következő beviteli rekordból; állítsa be NF , NR , FNR .

getline < fájlt

Állítson be $ 0-t a következő fájlrekordból; állítsa be az NF-et .

getline var

Állítsa be a var-ot a következő beviteli rekordból; állítsa be NR , FNR .

getline var < fájlt

Állítsa be a var fájlt a következő rekordból.

parancs | getline [ var ]

A parancs futtatásához a kimenetet vagy a $ 0 vagy a var értékre kell állítani a fentiek szerint.

command | & getline [ var ]

Indítsa el a parancsot, mint egy együttes folyamatot, amely a kimenetet akár $ 0-ra, akár var-ra , a fentiek szerint. Az együttes folyamatok egy gawk kiterjesztés.

következő

Állítsa le az aktuális beviteli rekord feldolgozását. A következő beviteli rekord elolvassa és a feldolgozás az AWK program első mintájával kezdődik. Ha elérte a bemeneti adatok végét, akkor az END blokk (ok) végrehajtásra kerül.

nextfile

Az aktuális bemeneti fájl feldolgozásának leállítása. A következő beviteli rekord olvasása a következő bemeneti fájlból származik. A FILENAME és az ARGIND frissítésre kerül, az FNR értéke 1-re áll vissza, és a feldolgozás az AWK program első mintájával kezdődik. Ha elérte a bemeneti adatok végét, akkor az END blokk (ok) végrehajtásra kerül.

nyomtatás

Kinyomtatja az aktuális rekordot. A kimeneti rekord véget ér az ORS változó értékével.

print expr-list

Kinyomtatja a kifejezéseket. Minden kifejezést az OFS változó értéke választ el. A kimeneti rekord véget ér az ORS változó értékével.

print expr-list > fájl

Kinyomtatja a kifejezést a fájlban . Minden kifejezést az OFS változó értéke választ el. A kimeneti rekord véget ér az ORS változó értékével.

printf fmt, expr-list

Formázás és nyomtatás.

printf fmt, expr-list > fájl

Fájl formázása és nyomtatása.

rendszer ( cmd-line )

Végezze el a cmd- parancs parancsát , és adja vissza a kilépési állapotot. (Ez nem feltétlenül elérhető a nem POSIX rendszereken.)

fflush ( [ fájl ] )

A nyitott kimeneti fájlhoz vagy csőfájlhoz társított puffereket átöblítheti. Ha hiányzik a fájl , akkor a szabványos kimenet elmosódik. Ha a fájl az null karakterlánc, akkor az összes megnyitott kimeneti fájl és csatorna pufferei elmosódnak.

További kimeneti átirányítások engedélyezettek a nyomtatáshoz és a nyomtatáshoz .

print ... >> fájlt

hozzáfűzi a fájl kimenetét.

nyomtatás ... | parancs

ír egy csőre.

nyomtatás ... | és parancs

adatokat küld egy együttműködési folyamatnak.

A getline parancs visszaküldi a 0-at a fájl végén és -1-et hiba esetén. Hiba esetén az ERRNO egy olyan karakterláncot tartalmaz, amely leírja a problémát.

MEGJEGYZÉS: Ha pipát vagy társprocesszort használ a getline , vagy a nyomtatási vagy printf egy cikluson belül, használja a close () billentyűt a parancs új példányainak létrehozásához. Az AWK nem zárja le automatikusan a csöveket vagy az együttes folyamatokat, amikor visszaadják az EOF-t.

A printf nyilatkozat

A printf utasítás és a sprintf () függvény AWK változatai (lásd alább) elfogadják a következő konverziós specifikációformátumokat:

% c

ASCII karakter. Ha a % c -ra használt argumentum numerikus, akkor karakterként kezeli és kinyomtatja. Ellenkező esetben az argumentum egy karakterlánc, és a karakterlánc egyetlen első karaktere kinyomtatható.

% d , % i

Decimális szám (az egész szám).

% e,% E

A [-] d.dddddde [+ -] dd formanyomtatvány lebegőpontos száma. A % E formátum e helyett e helyett E.

% f

A [-] ddd.dddddd formanyomtatvány lebegőpontos száma.

% g,% G

Használja a % e vagy a % f konverziót, attól függően, hogy melyik a rövidebb, és a nem szignifikáns nullák elnyomódtak. A % G formátum % e helyett % e .

% o

Egy unsigned oktális szám (egész szám is).

% u Nem aláírt decimális szám (ismét, egész szám).

% s

Egy karakterlánc.

% x,% X

Nem aláírt hexadecimális szám (egész szám). A % X formátum abcdef helyett ABCDEF- et használ.

%%

Egy % karakter; nincs argumentum átalakítva.

Opcionális, további paraméterek lehetnek a % és az ellenőrző betű között:

számít $

Használja a számláló argumentumát a formázás ezen pontján. Ezt pozíciós specifikálónak nevezik, és elsősorban a formázott karakterláncok fordított változataira, nem pedig az AWK program eredeti szövegére van használva. Ez egy gawk kiterjesztés.

-

A kifejezésnek a területén belül kell maradnia.

hely

Numerikus konverziók esetén előtagozzon pozitív értékeket egy szóközzel és negatív értékeket mínusz jelrel.

+

A szélességmódosító előtt (lásd alább) használt pluszjel azt mondja, hogy mindig jelet ad a numerikus konverziókhoz, még akkor is, ha a formázandó adatok pozitívak. A + felülbírálja a hely módosítását.

#

Használjon `` alternatív formát '' bizonyos vezérlõ betûkkel. % O esetén nyújtson be egy vezető nulla értéket. A % x és a % X esetén a 0x vagy a 0X értéket nemzero eredményként adja meg. % E , % E és % f esetén az eredmény mindig tizedespontot tartalmaz. % G és % G esetén a záró nullákat nem távolítják el az eredményből.

0

A 0-as vezető (zéró) jelzőként működik, ami azt jelzi, hogy a kimenetet ki kell tölteni zérusokkal a szóközök helyett. Ez még a nem numerikus kimeneti formátumokra is vonatkozik. Ez a zászló csak akkor van hatással, ha a mezőszél szélesebb, mint a kinyomtatni kívánt érték.

szélesség

A mezőt ennek a szélességnek kell betöltenie. A mező általában tele van. Ha a 0 jelzõt használta, akkor nulla.

. prec

Olyan szám, amely meghatározza a nyomtatáskor használt nyomtatási pontosságot. A % e , % E és % f formátumok esetén ez adja meg a tizedesponttól jobbra írt számjegyek számát. A % g és % G formátumok esetében meghatározza a legfontosabb számjegyek maximális számát. % D , % o , % i , % u , % x és % X formátumok esetén megadja a nyomtatni kívánt minimális számú számot. % S esetén megadja a karakterláncok maximális számát a kinyomtatandó karakterláncból.

Az ANSI C printf () rutinok dinamikus szélessége és precizitása támogatott. A * a szélesség vagy a prec paraméterek helyett az értékeket az argumentumlistából a printf vagy a sprintf () függvénybe kell venni. A dinamikus szélességgel vagy pontossággal rendelkező pozíciós specifikátor használatához adja meg a $ számlálást * a formátum string-ben. Például: "% 3 $ * 2 $. * 1 $ s" .

Speciális fájlnevek

Ha I / O átirányítást végez nyomtatásról vagy printf-ről fájlba, vagy fájlból getline-ra , a gawk bizonyos speciális fájlneveket ismer fel belsőleg. Ezek a fájlnevek hozzáférést biztosítanak a gawk szülőfolyamatából (általában a shellből) örökölt nyílt fájlleírókhoz. Ezek a fájlnevek is használhatók a parancssorban az adatfájlok megnevezéséhez. A fájlnevek:

/ dev / stdin

A standard bemenet.

/ dev / stdout

A szabvány kimenet.

/ dev / stderr

A standard hiba kimenet.

/ dev / fd / n

A megnyitott fájlleíróhoz tartozó fájl n .

Ezek különösen hasznosak a hibaüzeneteknél. Például:

print "Megfújtad!" > "/ dev / stderr"

míg máskülönben használni kellene

print "Megfújtad!" | "cat 1> & 2"

A következő speciális fájlnevek használhatók a & & co-process operátorral a TCP / IP hálózati kapcsolatok létrehozásához.

/ inet / tcp / lport / rhost / rport

Fájl TCP / IP kapcsolathoz helyi porton lport a távoli rhost távoli porton rportra . Használjon 0- os portot, hogy a rendszer kiválassza a portot.

/ inet / udp / lport / rhost / rport

Hasonló, de TCP / IP helyett UDP / IP protokollt használ.

/ inet / raw / lport / rhost / rport

Fenntartható későbbi felhasználásra.

Más speciális fájlnevek hozzáférést biztosítanak a futó gawk folyamat információihoz. Ezek a fájlnevek elavultak. Használja a PROCINFO tömböt, hogy megkapja az általuk szolgáltatott információkat. A fájlnevek:

/ dev / pid

A fájl olvasása az aktuális folyamat folyamatazonosítóját adja vissza, tizedes számmal, új sorral felmondva.

/ dev / ppid

A fájl olvasása a jelenlegi folyamat szintaktikai azonosítóját adja vissza, tizedes számmal, új sorral felmondva.

/ dev / pgrpid

A fájl olvasása a jelenlegi folyamat folyamatcsoport-azonosítóját adja vissza, tizedes számmal, új sorral felmondva.

/ dev / user

A fájl olvasása egy új sorral befejezett rekordot ad vissza. A mezőket szóközökkel választják el. $ 1 a getuid (2) rendszerhívás értéke, $ 2 a geteuid (2) rendszerhívás értéke, $ 3 a getgid (2) rendszerhívás értéke, és $ 4 a getegid (2) rendszerhívás. Ha vannak további mezők, azok a csoportok azonosítói, amelyeket a getgroups (2) visszaküldött. Több csoport nem támogatott minden rendszeren.

Numerikus funkciók

Az AWK a következő beépített aritmetikai funkciókkal rendelkezik:

atan2 ( y , x )

Visszaküldi az y / x arctangentjét radiánokban.

cos ( expr )

Visszaadja az expr koszinust, ami radianban van.

exp ( expr )

Az exponenciális függvény.

int ( expr )

Csúcsolva egész számra.

log ( expr )

A természetes logaritmikus függvény.

rand ()

Véletlen számot ad 0 és 1 között.

bűn ( expr )

Visszaadja az expr szinuszát, ami radianban van.

sqrt ( expr )

A négyzetgyök funkció.

srand ( [ expr ] )

A véletlenszerű számgenerátor új magját használja. Ha nincs megadva expr , akkor a napszakot használjuk. A visszatérési érték a véletlenszám-generátor előző vetőmagja.

Stringfunkciók

Gawk a következő beépített karakterláncokkal rendelkezik:

asort ( s [ , d ] )

Visszaadja az elemek számát a forrás tömbben s . Az s tartalmát az gawk szokásos szabályai alapján rendezzük el az értékek összehasonlítására, és az s rendezett értékeinek indexeit egymást követő egész számokkal helyettesítjük, kezdve az 1-gyel. Ha az opcionális d célmezőt adjuk meg, akkor az s először duplikálódik d-re , majd d rendeződik, így a forrás tömb indexei változatlanok maradnak.

gensub ( r , s , h [ , t ] )

Keresse meg a t sztringet a szabályos kifejezés r mérkőzéseihez. Ha h olyan string, amely g-vel vagy G- vel kezdődik, akkor cserélje ki az r összes találatát s-val . Ellenkező esetben h egy szám, amely jelzi, hogy melyik r egyezik a cserére. Ha nincs megadva, akkor $ 0 helyett. A helyettesítõ szövegen belül a \ n szekvencia, ahol n egy 1-9 számjegy, használható arra a szövegre, amely megfelel az n- edik zárójeles alfejezetnek. A \ 0 szekvencia a teljes egyező szöveget jelöli, ahogyan a karaktert is. A () és a gsub () függvényektől eltérően a módosított karakterlánc a függvény eredményeként kerül visszaadásra, és az eredeti cél-karakterlánc nem változik.

gsub ( r , s [ , t ] )

Minden olyan szubsztring esetében, amely a t szabályos kifejezéssel egyezik a t karakterlánccal, helyettesíti az s karakterláncokat, és visszaadja a helyettesítések számát. Ha nincs megadva, használja a $ 0 értéket . A helyettesítendő szöveg helyébe a behelyettesítendő szöveg kerül. Használja a \ & gombot a szó szoros értelmében. (Ezt írja be a "\\ &" kifejezéssel kapcsolatban : lásd : GAWK: Hatékony AWK programozás a (z) , sub () , gsub () és gensub () helyettesítő szövegének részletesebb megvitatásához a & és a backslashes szabályokra vonatkozóan.

index ( s , t )

Visszaadja a string t indexét az s karakterláncban, vagy 0, ha t nincs jelen. (Ez azt jelenti, hogy a karakterindexek egyenként indulnak.)

hossz ( [ s ] )

Visszaadja a húr s hosszúságát, vagy a $ 0 hosszt, ha s nincs megadva.

mérkőzés ( s , r [ , a ] )

Visszaadja az s helyét, ahol a szabályos kifejezés r , vagy 0, ha r nincs jelen, és beállítja az RSTART és RLENGTH értékeket. Vegye figyelembe, hogy az argumentumrendelés megegyezik a ~ operátorral: rés . Ha a tömb a van, akkor a törlődik, majd az 1-től n-ig terjedő elemek meg vannak töltve olyan s részekkel, amelyek megfelelnek a r-ben lévő megfelelő zárójeles részkifejezésnek. Az a 0'th eleme tartalmazza az s egészét, amely az egész szabályos kifejezésnek felel meg.

osztott ( s , a [ , r ] )

A sztringet az a szabályos kifejezésre osztja az a tömbben, és visszatér a mezők számához. Ha r elhagyásra kerül, az FS helyett. Az a tömb először törlődik. A felosztás ugyanúgy viselkedik, mint a fent leírt térbeli felosztás.

sprintf ( fmt , expr-list )

Az expr- listot az fmt szerint nyomtatja ki, és az eredményül kapott karakterláncot adja vissza.

strtonum ( str )

Megvizsgálja a str értéket , és visszaadja numerikus értékét. Ha str kezdődik egy vezetővel 0 , a strtonum () feltételezi, hogy str egy oktális szám. Ha a str egy 0x vagy 0x vezetővel kezdődik, a strtonum () feltételezi, hogy a str egy hexadecimális szám.

al ( r , s [ , t ] )

Csakúgy, mint a gsub () , de csak az első megfelelő alszöveget cserélik le.

szubsztr ( s , i [ , n ] )

A legfeljebb n karakterű szubsztrátot adja vissza i-re . Ha n- t kihagyunk, a többi részt használjuk.

tolower ( str )

Visszaadja a str string szövegének másolatát, a str összes nagybetűs karakterével a megfelelő kisbetűs társaikra. A nem alfabetikus karakterek változatlanok maradnak.

toupper ( str )

A str string szöveg másolatát adja vissza, az összes kisbetűs karaktert a megfelelő nagybetűs társaikhoz kell fordítani. A nem alfabetikus karakterek változatlanok maradnak.

Időfüggvények

Mivel az AWK programok egyik elsődleges felhasználása az időbélyegző adatokat tartalmazó naplófájlok feldolgozása, a gawk a következő funkciókat biztosítja időbélyegek megszerzéséhez és formázásához.

mktime ( datespec )

A rurns datapéldánya ugyanazon formátumú időbélyegzőbe kerül, mint a systime () . A datespec az YYYY MM DD HH MM SS [DST] formanyomtatvány karakterlánc. A sztring tartalma hat vagy hét szám, amely a teljes évet jelenti, beleértve a századot, az 1-12. Hónapot, a hónap napját 1-től 31-ig, a nap óráját 0-tól 23-ig, a percet 0-tól a 59, a második pedig 0 és 60 között és egy opcionális nyári időszámítás jelző. Ezeknek a számoknak az értékei nem lehetnek a megadott tartományon belül; például egy -1 óra 1 óra éjfél előtt. A származási nulladik gregorián naptárat feltételezzük, a 0 évvel megelőzve az 1-es évt és a -1-es évt megelőző -1-es évt. Az idő feltételezi, hogy a helyi időzónában van. Ha a nyári időszámítás pozitív, akkor az idő a nyári időszámításnak felel meg. ha nulla, akkor az idő szokásos időnek számít; és ha negatív (az alapértelmezett), az mktime () megpróbálja meghatározni, hogy a megadott időtartamra érvényes-e a nyári időszámítás. Ha a datespec nem tartalmaz elegendő elemet, vagy ha az eredmény időtartamon kívül esik, az mktime () értéke -1.

strftime ( [ formátum [ , időbélyegző ]] )

Formátumozza az időbélyeget a specifikáció szerint formátumban. Az időbélyegnek ugyanolyan formában kell lennie, mint a systime () . Ha hiányzik az időbélyegző , a napi aktuális időt használja. Ha a formátum hiányzik, a dátum (1) kimenetével egyenértékű alapértelmezett formátumot használnak. Tekintse meg az ANSI C strftime () függvényének specifikációját a rendelkezésre álló formátumú konverziókhoz. A strftime (3) nyilvános domain-változata és a man oldal, amelyhez a gawk tartozik ; Ha ezt a verziót használták a gawk készítéséhez , akkor az adott man oldalon leírt összes konverzió elérhető a gawk számára.

systime ()

Az aktuális időtartamot a másodpercek száma az Epoch óta (1970-01-01 00:00:00 UTC a POSIX rendszereken) adja vissza.

Bit manipulációk funkciók

A gawk 3.1-es verziójától kezdődően a következő bit-manipulációs funkciók állnak rendelkezésre. Úgy működnek, hogy dupla pontosságú lebegőpontos értékeket konvertálnak az alá nem írt hosszú egész számokra, elvégzik a műveletet, majd az eredményt lebegőpontra konvertálják. A funkciók:

és ( v1 , v2 )

Adja vissza az v1 és v2 által megadott értékek bitenkénti AND értékét.

compl ( val )

Adjuk vissza a bit bit-kiegészítőjét.

lshift ( val , count )

Visszaadja a val értékét, amelyet számlálókkal balra tolunk.

vagy ( v1 , v2 )

Adja vissza az v1 és v2 által megadott értékek bitenkénti OR értékét.

rshift ( val , count )

Adjuk vissza a val értékét, amelyet a számláló bitek jobbra tolunk.

xor ( v1 , v2 )

Adja vissza a v1 és v2 által biztosított értékek bitenkénti XOR értékét.

Nemzetköziesítési funkciók

A gawk 3.1-es verziójától kezdve az AWK programon belül a következő funkciók használhatók a karakterláncok futtatáskor történő fordítására. A részleteket lásd : GAWK: Hatékony AWK programozás .

bindtextdomain ( könyvtár [ , tartomány ] )

Megadja a könyvtárat, ahol a gawk a .mo fájlokat keresi , abban az esetben, ha nem, vagy nem helyezhetők el a `` standard '' helyeken (pl. Tesztelés közben). Visszaadja azt a könyvtárat, ahol a domain "kötött".

Az alapértelmezett tartomány a TEXTDOMAIN értéke. Ha a könyvtár a null karakterlánc ( "" ), akkor a bindtextdomain () az adott tartományhoz tartozó aktuális kötést adja vissza.

dcgettext ( string [ , domain [ , kategória ]] )

Visszaadja a karakterlánc fordítását a szöveges domain domainen a területi kategória kategóriában . A domain alapértelmezett értéke a TEXTDOMAIN aktuális értéke. A kategória alapértelmezett értéke "LC_MESSAGES" .

Ha egy értéket ad meg a kategóriához , akkor annak a HLWK: Hatékony AWK programozásban leírt ismert területi kategóriáknak megfelelő sztringnek kell lennie. Szintén szöveges tartományt kell biztosítania. Használja a TEXTDOMAIN alkalmazást, ha az aktuális domaint szeretné használni.

dcngettext ( string1 , string2 , number [ , domain [ , kategória ]] )

Visszaadja a string1 és a string2 fordításának számához használt többes számú űrlapot a szöveges tartomány doménjében a területi kategória kategóriában . A domain alapértelmezett értéke a TEXTDOMAIN aktuális értéke. A kategória alapértelmezett értéke "LC_MESSAGES" .

Ha egy értéket ad meg a kategóriához , akkor annak a HLWK: Hatékony AWK programozásban leírt ismert területi kategóriáknak megfelelő sztringnek kell lennie. Szintén szöveges tartományt kell biztosítania. Használja a TEXTDOMAIN alkalmazást, ha az aktuális domaint szeretné használni.

USER-DEFINED FUNCTIONS

Az AWK funkciói a következők:

függvény neve ( paraméterlista ) { utasítások }

A függvények végrehajtása akkor történik meg, amikor a kifejezésekből a mintákban vagy műveletekben nevezik őket. A funkcióhívásban szolgáltatott tényleges paraméterek használhatók a függvényben deklarált formális paraméterek instantiálásához. A tömbök referenciaként áthaladnak, a többi változót érték szerint adják át.

Mivel a funkciók nem eredetileg az AWK nyelvének részét képezték, a helyi változókra vonatkozó rendelkezés meglehetősen nehézkes: a paraméterlistában extra paramé- terként deklarálnak. A konvenció a helyi változók elválasztását a valós paraméterektől a paraméterlistán lévő extra szóközökkel. Például:

függvény f (p, q, a, b) # a és b helyiek {...} / abc / {...; f (1,2); ...}

A baloldali zárójelben egy függvényhívás szükséges, hogy azonnal kövesse a funkció nevét, anélkül, hogy beavatkozna a fehér hely. Ezzel elkerülhető a szinkatikus kétértelműség a concatenation operátorral. Ez a korlátozás nem vonatkozik a fent felsorolt ​​beépített funkciókra.

A függvények hívhatják egymást, és lehetnek rekurzívak. A helyi változóként használt funkcióparaméterek inicializálva a null karakterláncra és a nullszámra a függvényhívás után.

Használja a return expr értéket egy függvényből. A visszatérési érték nincs meghatározva, ha nincs megadva érték, vagy ha a függvény "leesik" a végén.

Ha a --lint megadásra került, a gawk figyelmen kívül hagyja a definiált függvények hívásait a parsing időben, ahelyett, hogy futási időn belül. A meg nem határozott függvény futtatásakor végzetes hiba.

A func szó használható a funkció helyén.

ÚJ FUNKCIÓK DYNAMICALLY LOADING

A gawk 3.1-es verziójától kezdődően új beépített függvényeket dinamikusan hozzáadhat a futó gawk tolmácshoz . A teljes részletek nem tartoznak ezen kézikönyv oldal határa alá; lásd : GAWK: Hatékony AWK programozás a részletekért.

kiterjesztés ( objektum , funkció )

Dinamikusan kösse össze az objektum által megnevezett megosztott objektumfájlt, és hívja fel a függvényt az adott objektumban az inicializálás végrehajtásához. Ezeket mindkettőnek húrként kell megadni. Visszaadja a függvény által visszaadott értéket.

Ezt a funkciót a GAWK: Effective AWK Programozás biztosítja és dokumentálja, de ez a funkció valószínűleg változik a következő kiadásban. Erősen ajánljuk, hogy ne használja ezt a funkciót semmiért, amit nem kíván visszaválasztani.

SIGNALS

A pgawk két jelet fogad el. A SIGUSR1 elindítja a profilt és a függvényhíváscsomagot a profilfájlba, vagy az awkprof.out-ot , vagy bármely fájlt a -profile opcióval. Ezután továbbra is fut. A SIGHUP azt eredményezi, hogy a profilt és a funkció híváscsomagját eldobja, majd kilép.

PÉLDÁK

Nyomtassa ki és rendezze az összes felhasználó bejelentkezési nevét: BEGIN {FS = ":"} {print $ 1 | "sort"} Számláló sorok egy fájlban: {nlines ++} END {print nlines} Előző sorok száma a fájlban: {print FNR, $ 0} Összekötés és sor száma (egy változat egy témában): {print NR, $ 0}

internalizáció

A karakterlánc-konstansok a kettős idézőjelben lévő karakterek sorozata. Nem angol nyelvű környezetben az AWK programban szereplő karakterláncokat a natív természetes nyelvre fordítással jelölhetjük meg. Az ilyen karakterláncok az AWK programban vannak megjelölve, egy vezető aláhúzással (`` _ ''). Például,

gawk 'BEGIN {print "hello, world"} "

mindig kiírja a világot . De,

gawk 'BEGIN {print _ "hello, világ"}'

lehet nyomtatni bonjour, monde Franciaországban.

Számos lépést teszünk egy lokalizálható AWK program készítésében és futtatásában.

1.

BEGIN művelet hozzáadásával értéket rendelhet a TEXTDOMAIN változóhoz, hogy a szöveges tartományot a programhoz társított névhez állítsa be.


BEGIN {TEXTDOMAIN = "myprog"}

Ez lehetővé teszi, hogy a gawk megtalálja a programhoz társított .mo fájlt. E lépés nélkül a gawk az üzenet szöveges tartományát használja, amely valószínűleg nem tartalmaz fordításokat a programhoz.

2.

Jelöljön ki minden olyan húrt, amelyet le kell fordítani a legfontosabb aláhúzással.

3.

Szükség esetén használja a program dcgettext () és / vagy bindtextdomain () függvényeit.

4.

A gawk -gen-po -f myprog.awk> myprog.po programot futtassa egy .po fájl létrehozásához a programhoz.

5.

Adjon megfelelő fordításokat, és készítsen és telepítsen egy megfelelő .mo fájlt.

A nemzetköziesedési jellemzők részletes leírása a GAWK: Effective AWK Programming programban .

Posix kompatibilitás

A gawk elsődleges célja a POSIX szabvány szerinti kompatibilitás, valamint a UNIX awk legújabb verziója. Ebből a célból a gawk az alábbi felhasználói látható szolgáltatásokat tartalmazza, amelyek nem szerepelnek az AWK könyvben, de az awk Bell Laboratories változatának részét képezik, és a POSIX szabványban vannak.

A könyv azt jelzi, hogy a parancssori változók hozzárendelése akkor történik meg, amikor az awk másképp nyitja meg az argumentumot, mint egy fájl, ami a BEGIN blokk végrehajtása után történik. Azonban a korábbi implementációkban, amikor egy ilyen hozzárendelés megjelenik a fájlnevek előtt, a hozzárendelés a BEGIN blokk futtatása előtt megtörténik. Az alkalmazások az adott "funkcióról" függtek. Amikor az awk megváltozott, hogy megfeleljen a dokumentációnak, akkor a változók hozzárendeléséhez a -v opciót a program végrehajtása előtt hozzáadtuk a régi viselkedés függvényében. (Ezt a funkciót mind a Bell Laboratories, mind a GNU fejlesztők egyetértették.)

A -W opció végrehajtási funkciók a POSIX szabványból származnak.

Az argumentumok feldolgozása során a gawk a `` - '' speciális opciót használja az argumentumok végének jelzésére. Kompatibilitási módban figyelmeztet, de egyébként figyelmen kívül hagyja a nem definiált beállításokat. Normál működés esetén ezeket az érveket továbbítják az AWK programnak.

Az AWK könyv nem határozza meg a srand () visszatérési értékét. A POSIX szabvány visszaadja az általa használt magot, hogy lehetővé tegye a véletlen számsorok nyomon követését. Ezért a gawk srand () szintén visszaadja a jelenlegi magját.

További új funkciók: Többszörös -f opciók használata (az MKS awk-ból ); az ENVIRON tömb; az \ a , és \ v escape szekvenciák (eredetileg gawk-ben készültek és visszaadták a Bell Laboratories verziójába); a tolower () és a toupper () beépített funkciókat (a Bell Laboratories verziótól); és az ANSI C konverziós specifikációkat printf-ben (először a Bell Laboratories verzióban).

Történelmi jellemzők

A gawk támogatja a történelmi AWK megvalósítások két jellemzőjét. Először is lehetőség van arra, hogy a hossz () beépített funkciót ne csak érv nélkül, hanem zárójel nélkül is hívjuk! És így,

a = hossza # Szent Algol 60, Batman!

ugyanaz, mint bármelyik

a = hossz ()
a = hossza ($ 0)

Ez a szolgáltatás a POSIX szabványban "deprecált" jelölésű, és a gawk figyelmezteti annak használatát, ha a --lint a parancssorban van megadva.

A másik lehetőség a folytonos vagy a szünet kijelentése a testen kívül, egy ideig , vagy nem . A hagyományos AWK implementációk az ilyen felhasználást a következő nyilatkozathoz hasonlóan kezelik. Gawk támogatja ezt a felhasználást, ha - a hagyományos - már meg van adva.

GNU kiterjesztések

A Gawk számos kiterjesztéssel rendelkezik a POSIX awk-ra . Ezeket a fejezeteket ismertetik. Az itt leírt összes kiterjesztés letiltható a gawk meghívásával a --traditional opcióval.

A gawk következő jellemzői nem érhetők el a POSIX awk-ban .

*

Az " f" opcióval megadott fájlok esetében nincs útvonal keresés. Ezért az AWKPATH környezeti változó nem különleges.

*

A \ x escape szekvencia. (Letiltva a --poszterrel) .

*

Az fflush () függvény. (Letiltva a --poszterrel) .

*

Az a képesség, hogy folytatják a vonalakat ? és :. (Letiltva a --poszterrel) .

*

Octális és hexadecimális állandók az AWK programokban.

*

Az ARGIND , BINMODE , ERRNO , LINT , RT és TEXTDOMAIN változók nem különösebbek.

*

Az IGNORECASE változó és mellékhatásai nem állnak rendelkezésre.

*

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

*

A PROCINFO tömb nem áll rendelkezésre.

*

Az RS szabályos kifejezésként való használata.

*

Az I / O átirányításra elérhető speciális fájlnevek nem ismertek fel.

*

A & operátor az együttes folyamatok létrehozásához.

*

Az egyes karakterek szétválaszthatók az null karakterlánc használatával, az FS értékeként, és a harmadik argumentumként osztva () .

*

Az opcionális második argumentum a close () függvényhez.

*

Az opcionális harmadik argumentum a match () függvényhez.

*

A pozíciós specifikátorok használata a printf és sprintf () függvényekkel .

*

A törlési tömb használata a tömb teljes tartalmának törléséhez.

*

A következő fájl használata az aktuális bemeneti fájl feldolgozásának elhagyására.

*

A () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () vagy rshift () () és xor () függvényeket.

*

Helymeghatározható karakterláncok.

*

Új beépített függvények dinamikus hozzáadása a kiterjesztés () függvénnyel.

Az AWK könyv nem határozza meg a close () függvény visszatérési értékét. A Gawk close () a kimeneti fájl vagy csatorna bezárásakor visszaadja az értéket fclose (3) -ból vagy pclose (3) -ból . Visszakapcsolja a folyamat kilépési állapotát a bemeneti cső bezárásakor. A visszatérési érték -1, ha a megadott fájl, csővezeték vagy társprocesszár nem lett megnyitva átirányítással.

Ha a gawk meghívása a --traditional opcióval történik, akkor ha az f-argumentum az -F opcióhoz `` t '', akkor az FS a lap karakterre van állítva. Ne feledje, hogy a gawk -F \ t ... beírása egyszerűen a shell-t idézi a `` t '' -nek, és nem átadja `` \ t '' a -F opciónak. Mivel ez egy meglehetősen csúnya különleges eset, nem az alapértelmezett viselkedés. Ez a viselkedés nem akkor is fordul elő, ha a --posix megadva van. Ahhoz, hogy valóban egy fül karakter legyen a mező szétválasztó, a legjobb, ha egyetlen idézőjelet használ: gawk -F '\ t' ....

Tekintse meg a következő parancsokat : wait , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , aki , iwconfig , ifconfig , vgdisplay , nyitott , lsmod , ntohs , mailq , kill , wtmp