Skip to main content

Gawk - Linux Command - Unix parancs

Supersection 1, More Comfortable (Június 2026)

Supersection 1, More Comfortable (Június 2026)
Anonim

Név

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

Szinopszis

mamlasz POSIX vagy GNU stílusú beállítások -f programfile -- fájl …mamlasz POSIX vagy GNU stílusú opciók -- programban szöveges fájl …

pgawk POSIX vagy GNU stílusú beállítások -f programfile -- fájl …pgawk POSIX vagy GNU stílusú opciók -- programban szöveges fájl …

Leírás

gawk a GNU Project az AWK programozási nyelvének megvalósítása. Megfelel a POSIX 1003.2 Command Language és Utilities szabvány nyelvének meghatározására. Ez a verzió a leírásban található Az AWK programozási nyelv , az Aho, a Kernighan és a Weinberger, a System V Release 4 változatának UNIX awk . gawk szintén újabb Bell Laboratóriumok nyújtanak awk bővítményeket és számos GNU-specifikus kiterjesztést.

Pgawk a mamlasz . Minden módon megegyezik mamlasz , kivéve, hogy a programok lassabban futnak, és automatikusan létrehoz egy végrehajtási profilt a fájlban awkprof.out amikor kész. Lásd a --profil lehetőség alatt.

A parancssor a következő opciókat tartalmazza: mamlasz maga az AWK program szövege (ha nem a -f vagy --file opciók), valamint a ARGC és ARGV előre meghatározott AWK változók.

Opció formátum

gawk opciók lehetnek hagyományos POSIX one letter 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ányt követve, mamlasz -specifikus opciók érkeznek érveken keresztül -W választási lehetőség. Többszörös -W lehetőségeket lehet adni -W opciónak megfelelő hosszú opció van, az alábbiakban részletezett módon. A hosszú opciók argumentumait vagy egy opcióval egyesítjük = jelet, nincs beavatkozó szóköz, vagy a következő parancssori argumentumban megadhatók. A hosszú opciók rövidíthetők, mindaddig, amíg a rövidítés egyedülálló marad.

Opciók

gawk elfogadja a következő opciókat, betűrendben felsorolva.

-F fs

--field-elválasztó fs Használat fs a beviteli mező szétválasztásához (a FS előre definiált változó).

-v var = val

--hozzárendelni var = val Adja meg az értéket val a változóhoz var , mielőtt a program végrehajtása megkezdődik. Az ilyen változó értékek a KEZDŐDIK AWK program blokkja.

-f programfile

--file programfile Olvassa el az AWK programforrást a fájlból programfile , az első parancssori argumentum helyett. Többszörös -f (vagy --file) opciókat lehet használni.

-mf NNN

-úr NNN Állítson különböző memóriahatárokat az értékre NNN . A f zászló állítja be a maximális számú mezőt, és a r zászló állítja be a maximális rekordméretet. Ez a két zászló és a -m lehetőség a UNIX Bell Laboratories kutatási verziójából származik awk . Őket figyelmen kívül hagyják mamlasz , mivel mamlasz nincs előre meghatározott határai.

-W kompat

-W hagyományos

--compat

--hagyományos Befut kompatibilitás mód. Kompatibilitási módban, mamlasz azonos módon viselkedik a UNIX rendszerrel awk ; a GNU-specifikus kiterjesztések egyikét sem ismerik fel. A … haszna --hagyományos előnyben részesítendő az opció többi formájánál. Lát GNU EXTENSIONS, alább, további információkért.

-W copyleft

-W szerzői jog

--copyleft

--szerzői jog Nyomtassa ki a GNU szerzői jogi információ rövid verzióját a szabványos kimeneten és hagyja el a sikeres kimenetet.

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

--dump-változók= fájl A globális változók, azok típusainak és végső értékeinek rendezett listájának kinyomtatása fájl . Ha nem fájl biztosított, mamlasz egy nevű fájlt használ awkvars.out az aktuális könyvtárban.

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 én, j, stb.)

-W segítséget

-W használat

--Segítség

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

-W lint= halálos

--lint meg= halálos Adjon figyelmeztetéseket a kétszeres vagy nem hordozható konstrukciókra az egyéb AWK implementációkhoz. Opcionális argumentummal halálos, a szöszi figyelmeztetések végzetes hibák. Ez drasztikus lehet, de használata biztosan ösztönözni fogja a tisztább AWK-programok kidolgozását.

-W szőrös

--lint meg régi Adjon figyelmeztetéseket olyan konstrukciókra, amelyek nem hordozhatók a Unix eredeti verziójához awk .

-W gen-po

--gen-po Szkennelje és értelmezze az AWK programot, és generáljon egy GNU-t .po formátumú fájlt a szabványos kimeneten, és a program összes lokalizálható karakterláncára vonatkozó bejegyzéseket. A program nem kerül végrehajtásra. Lásd a GNU-t gettext a további információkért .po fájlokat.

-W nem tizedes adat

--non tizedesjegynél adatok Az oktális és a hexadecimális értékek felismerése a bemeneti adatokban. Használja ezt az opciót óvatosan!

-W posix

--posix Ez bekapcsol kompatibilitás módban, a következő további korlátozásokkal:

*

x a menekülési szekvenciákat nem ismeri fel.

*

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

*

Nem tudod folytatni a sorokat ? és :.

*

A szinonimája func a kulcsszóhoz funkció nem ismeri fel.

*

Az üzemeltetők ** és **= nem használható ahelyett, hogy ^ és ^=.

*

A fflush () funkció nem áll rendelkezésre.

-W profil= prof_file

--profil= prof_file Profiladatok küldése prof_file . Az alapértelmezett awkprof.out. Amikor fut mamlasz , a profil csak egy "szép nyomtatott" verzió a programban. Amikor fut pgawk , a profil tartalmazza a program minden egyes utasításának végrehajtási számát a bal margóban és a függvényhívások számát minden egyes felhasználó által definiált függvény számára.

-W újraintervallum

--re-intervallum Engedélyezze a intervallum kifejezések szabályos kifejezésegyezéssel (ld Rendszeres kifejezések, lent). Az intervallum kifejezései hagyományosan nem álltak rendelkezésre az AWK nyelvben. A POSIX szabvány hozzáfűzte őket awk és egrep összhangban vannak egymással. Azonban használatuk valószínűleg megtöri a régi AWK programokat, tehát mamlasz csak akkor biztosítja őket, ha ezt a lehetőséget választják, vagy amikor --posix meg van adva.

-W forrás programban szöveges

--forrás programban szöveges Használat programban szöveges mint az AWK program forráskódja. Ez az opció lehetővé teszi a könyvtári funkciók könnyű összekeverését (a -f és --file opciók) 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

--változat Nyomtasson verzióadatokat az adott példányra vonatkozóan mamlasz a szabvány kimeneten. Ez elsősorban annak tudatosítására szolgál, hogy a mamlasz a rendszered naprakész, függetlenül attól, amit a Free Software Foundation terjeszt. Ez a hibák bejelentésekor is hasznos. (Per GNU kódolási szabványok , 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 működés közben mindaddig, amíg a program szövegét megadta, ismeretlen opciókat továbbítanak az AWK programba a ARGV tömb feldolgozásra. 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.

minta { cselekvési nyilatkozatok }funkció név ( paraméterlista ) { nyilatkozatok }

gawk először elolvassa a program forrását a programfile (ok), ha meg van adva, argumentumoktól kezdve --forrás, vagy a parancssor első nem opcionális argumentumából. A -f és --forrás a parancssor többször is használható a parancssorban. gawk a program szövegét úgy olvassa, mintha az összes programfile s és a parancssori forrásszövegeket összefogták egymással. 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.

A környezeti változó AWKPATH meghatározza a keresési útvonalat, ha a -f választási lehetőség. 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 hogyan mamlasz építették és telepítették.) Ha a -f opció tartalmaz egy `` / '' karaktert, nincs útvonal keresés.

gawk az AWK programokat a következő sorrendben hajtja végre. Először is, a -v lehetőség van. Következő, mamlasz összeállítja a programot belső formába. Azután, mamlasz végrehajtja a kódot a KEZDŐDIK blokk (ok) (ha van ilyen), majd folytatja a ARGV sor. Ha a parancssorban nincsenek megnevezések, mamlasz elolvassa a standard bemenetet.

Ha a parancssoron található fájlnévnek van az űrlapja var = val változó hozzárendelésként kezelik. A változó var lesz hozzárendelve az értékhez val . (Ez történik bármelyik után KEZDŐDIK A parancssor változó hozzárendelése leginkább hasznos az értékek dinamikus hozzárendeléséhez az AWK-változókhoz, amelyekkel szabályozható, hogy a bevitelt mezőkre és rekordokra osztják. Hasznos az állapotszabályozáshoz is, ha több adatfolyam szükséges egy adatfájl fölött.

Ha a ARGV üres (''), mamlasz ugrik át rajta.

A bemenet minden rekordjára vonatkozóan, mamlasz tesztek, hogy megegyezik-e valamivel minta az AWK programban. Minden olyan minta, amelyen a rekord egyezik, a hozzá tartozó akció végrehajtásra kerül. A mintákat a sorrendben tesztelik a programban.

Végül, miután az összes bemenet kimerült, mamlasz végrehajtja a kódot a VÉGE blokk (ok) (ha vannak).

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 az értékek hozzárendelése a beépített változóhoz RS. Ha RS minden egyes karakter, a karakter elválasztja a rekordokat. Másképp, RS rendszeres 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 RS a null karakterláncra van állítva, majd a rekordokat üres sorok választják el. Amikor RS a null karakterláncra van állítva, az újsoros karakter minden tekintetben térbeli elválasztóként működik FS lehet.

Fields

Mivel minden bemeneti adat olvasható, mamlasz feldarabolja a rekordot mezők , felhasználva a FS mint mezőszétválasztó. Ha FS egy karakter, a mezőket a karakter választja el. Ha FS az null karakterlánc, akkor minden egyes karakter egy külön mező lesz. Másképp, FS várhatóan teljes szabályos kifejezés. Különleges esetekben FS egy szóköz, a mezőket terek és / vagy lapok és / vagy új sorok futják egymástól. (De lásd a vita --posix, lent). JEGYZET: Az értéke IGNORECASE (lásd alább) szintén befolyásolja, hogy a mezők mikor oszlanak meg FS rendszeres kifejezés, és mikor vannak felosztva a rekordok RS rendszeres kifejezés.

Ha a FIELDWIDTHS a 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 mamlasz a rekordot a megadott szélességek alapján osztja fel. Az értéke FS figyelmen kívül hagyják. Új érték hozzárendelése a következőhöz: FS felülírja a FIELDWIDTHS, és visszaállítja az alapértelmezett viselkedést.

A bemeneti rekord minden mezőjét hivatkozhat a pozíciója, $1, $2, stb. $0 az egész rekord. A mezőket nem kell hivatkozni a konstansokkal:

n = 5print $ n

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

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

Nem létező mezőkre (pl $ NF) a null sztringet állítják elő. Azonban a nem létező mező hozzárendeléséhez (pl. $ (NF + 2) = 5) növeli a NF, az összes értéket adja meg a null karakterláncú beavatkozó mezők, és az értékét $0 újból át kell adni, a mezőket pedig a OFS. A negatív számozott mezőkre vonatkozó hivatkozások végzetes hibát okoznak. csökkentjük NF okozza az új érték múltbeli mezők értékeinek elvesztését, és a $0 újból át kell adni, a mezőket pedig a OFS.

Egy érték hozzárendelése egy meglévő mezőhöz az egész rekord újbóli létrehozását eredményezi $0 hivatkoznak. Hasonlóképpen, hozzárendel egy értéket $0 a rekord újrahasznosítását eredményezi, és új értékeket hoz létre a mezők számára.

Beépített változók

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

ARGC

A parancssori argumentumok száma (nem tartalmazza a mamlasz , vagy a programforrás).

ARGIND

Az index a ARGV az aktuális fájl feldolgozásakor.

ARGV

A parancssori érvek metszete. A tömb indexelve 0 és ARGC - 1. Dinamikusan megváltoztatja a ARGV 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. A "R", vagy "W" adja meg, hogy a bemeneti fájlok vagy a kimeneti fájlok bináris I / O-t használjanak. A "Rw" vagy "Wr" adja meg, hogy az összes fájlnak bináris I / O-t kell használnia. Bármelyik másik karakterlánc értékét a következőképpen kell kezelni "Rw", de figyelmeztető üzenetet generál.

CONVFMT

A számok átváltási formátuma, "% .6g", alapértelmezés szerint.

ENVIRON

Az aktuális környezet értékeit tartalmazó tömb. A tömböt a környezeti változók indexelik, minden egyes elem a változó értéke (pl.ENVIRON "HOME" talán / Home / arnold). A tömb megváltoztatása nem befolyásolja a környezetet, amelyet a programok látnak mamlasz átirányítással vagy a rendszer()funkció.

ERRNO

Ha rendszerhiba következik be, vagy átirányítja a következőt: getline, olvasás közben getline, vagy a Bezárás(), azután ERRNO tartalmaz egy karakterláncot, amely leírja a hibát. Az érték nem angol nyelvű fordítással érhető el.

FIELDWIDTHS

A terepi kiterjedésű terepen elkülönített lista. Ha be van állítva, mamlasz a bemenetet a rögzített szélességű mezőkre használja, ahelyett, hogy a FS mint mezőszétválasztó.

FÁJL NÉV

Az aktuális bemeneti fájl neve.Ha a parancssorban nincsenek megadva fájlok, akkor a FÁJL NÉV `` - ''. Azonban, FÁJL NÉV nincs meghatározva a KEZDŐDIK blokk (hacsak nincs beállítva 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át Fields, felett.

IGNORECASE

Az összes szabályos kifejezés és a karakterlánc műveleteinek esetleges érzékenységét szabályozza. Ha IGNORECASE nem nulla értékű, majd string-összehasonlítások és minták illesztése a szabályokban, terepi felosztás a FS, rekord elkülönítve a RS, reguláris kifejezés illeszkedik a ~és !~, és a gensub (), gsub (), index(), mérkőzés(), hasított(), és alatti() A beépített funkciók mindegyike figyelmen kívül hagyja az esetet a rendszeres kifejezés műveletek során. JEGYZET: Array-indexezés nem érintett, sem a Egy fajta() funkció.

Így, ha IGNORECASE nem nulla, / AB / megfelel az összes karakterláncnak "Ab", "AB","Ab", és "AB". Mint minden AWK változó esetében, a IGNORECASE nulla, ezért a rendszeres kifejezés és a karakterlánc műveletei normál esetben kis- és nagybetűk. 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 szabályozza a --lint meg lehetőség az AWK programon belül. Ha igaz, mamlasz nyomtatja a szöszi figyelmeztetéseket. Ha hamis, akkor nem. Amikor hozzárendeli a karakterlánc értékét "halálos", a szöszi figyelmeztetések végzetes hibákká válnak, pontosan ugyanúgy --lint meg = 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, "% .6g", alapértelmezés szerint.

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. Egyes rendszereken lehetnek elemek a tömbben, "Group1" keresztül "csoport n ' néhány n , amely a folyamatban lévő kiegészítő csoportok számát jelenti. Használja a ban ben hogy tesztelje ezeket az elemeket. A következő elemek garantáltan rendelkezésre állnak:

Procinfo "egid"

a getegid (2) rendszerhívás.

Procinfo "euid"

a geteuid (2) rendszerhívás.

Procinfo "FS"

"FS" ha terepi felosztást végez FS érvényben van, vagy "FIELDWIDTHS" ha terepi felosztást végez FIELDWIDTHS hatályos.

Procinfo "gid"

a getgid (2) rendszerhívás.

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.

RS

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

RT

A rekord terminátor. gawk készletek RT a beírt szöveghez, amely megfelel a megadott karakternek vagy szabályos kifejezésnek RS.

RSTART

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

RLENGTH

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

SUBSEP

Alapértelmezés szerint a több elemet külön töredező elemek elkülönítésére használják ' 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 összefűzéséből áll, elválasztva a SUBSEP változó. 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"

hozzárendeli a karakterláncot "hello, világ n" a tömb eleméhez x amely a string által indexelt"A 034B 034C". Az AWK összes tömbje asszociatív, vagyis string értékekkel indexelve.

A különleges üzemeltető ban ben használható egy ha vagy míg hogy egy tömbnek van egy adott értékből álló indexe.

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

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

A ban ben konstrukció is használható a mert hurok, hogy egy tömb minden elemére iteráljon.

Egy elem törölhető egy tömbből a töröl nyilatkozat. A töröl kifejezést használhatjuk egy tömb teljes tartalmának törléséhez is, 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 átalakítani, akkor a konverzió a következővel történik: strtod (3). A számot a következő értékek használatával számsorba konvertáljuk: string CONVFMT mint formázott karakterlánc sprintf (3), a változó numerikus értékével, mint argumentummal. Annak ellenére, hogy az AWK összes száma lebegőpontos, az integrált értékek mindig egész számká konvertálva. Így adott

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

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

gawk összehasonlítja a következőket: 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 egyértelműen helytelen, és mamlasz 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 '57', vannak nem numerikus karakterláncok, ezek string konstansok. A "numerikus karakterlánc" ötlete csak a mezőkre vonatkozik, getline bemenet, FÁJL NÉV, ARGV elemek, ENVIRON elemek és az elemek által létrehozott tömböt hasított() amelyek numerikus karakterláncok. Az alapötlet az, hogy felhasználói bevitel , és csak a numerikusnak látszó felhasználói bemenetet 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

Kezdve a 3.1 gawk, C-stílusú oktális és hexadecimális konstansokat használhat AWK program forráskódjában. Például az oktális érték 011 egyenlő a tizedesével 9, és a hexadecimális értéket 0x11 egyenlő a tizedesjegyekkel 17.

Vonós konstansok

Az AWK karakterlánc-konstansjai a kettős idézőjelek közé záródó karakterek szekvenciái ('). A húrokon belül bizonyos escape szekvenciák mint a C-ben. 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ámjegyeket

A karakter a hexadecimális számjegyekből álló karakterláncot jelöli 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 valamit a nyelvtervezésről a bizottságban.) Például, " X1B" az ASCIIESC (escape) karakter.

ddd

Az 1-es, 2-es vagy 3-jegyű oktális számjegyek által képviselt karakter. Például., ' 033' az ASCII ESC (escape) karakter.

c

A 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 karaktereihez).

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. És így, / A 52b / egyenértékű/ 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 nyilatkozatokat mellékelték { és }. 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 ||. Vonalak végződnek csinál vagy más nyilatkozatai is folytatódnak a következő sorban. 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:

KEZDŐDIK VÉGE / reguláris kifejezés / relációs kifejezés minta && minta minta || minta minta ? minta : minta ( minta ) ! minta minta1 , MINTÁZAT2

KEZDŐDIK és VÉGE két különféle mintázat, amelyeket nem teszteltek a bevitellel szemben. Az akció részei KEZDŐDIK a mintákat összeolvasztják, mintha az összes kijelentést egyetlenben írnák KEZDŐDIK Blokk. Ezek végrehajtása a bemenet bármelyikének olvasása előtt történik. Hasonlóképpen, minden VÉGE blokkok összevonásra kerülnek, és végrehajtásra kerülnek, amikor az összes bemenet kimerült (vagy amikor egy kijárat utasítás végrehajtásra kerül). KEZDŐDIK és VÉGE a minták nem kombinálhatók a mintázat-kifejezések más mintáin. KEZDŐDIK és VÉGE A minták nem tartalmazhatnak hiányzó akcióelemeket.

mert / reguláris kifejezés / mintákat, a hozzárendelt utasítás minden olyan bemeneti rekord esetében végrehajtásra kerül, amely megfelel a szabályos kifejezésnek. A rendszeres kifejezések megegyeznek a hagyományos kifejezésekkel egrep (1), és az alábbiakban foglalhatók össze.

A relációs kifejezés használhatja az alábbiakban meghatározott műveletek bármelyikét a műveletekről szóló szakaszban. 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 ?: az operátor ugyanolyan operátor a C-ban. Ha az első mintázat igaz, akkor a teszteléshez alkalmazott minta a második minta, ellenkező esetben a harmadik. Csak a második és a harmadik minták egyikét értékelik.

A minta1 , MINTÁZAT2 A kifejezés formáját a tartományban . Minden beviteli rekordnak megfelel egy olyan rekorddal, amely megfelel minta1 , és addig folytatódik, amíg egy rekord meg nem egyezik MINTÁZAT2 , beleértve. Nem kapcsolódik semmilyen másfajta mintázat kifejezéshez.

Rendszeres kifejezések

A szabályos kifejezések a kiterjesztett fajta egrep . Ezek a következő karakterekből állnak:

c

megegyezik a nem-metakarakterekkel c .

c

megfelel a szó szerinti karakternek c .

.

megfelel bármilyen karakternek beleértve új sor.

^

megegyezik egy string kezdetével.

$

megegyezik egy karakterlánc végeivel.

ABC…

karakterlista, a karakterek bármelyikével megegyezik ABC… .

^ ABC…

elutasított karakterlista, minden karaktert illeti, kivéve ABC… .

r1 | r2

váltakozás: egyezik sem r1 vagy r2 .

R1R2

összefonódás: mérkőzések r1 , és akkor r2 .

r +

illeszkedik egy vagy több r „S.

r *

nulla vagy annál többet ér r „S.

r ?

nulla vagy egy r „S.

( r )

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

r { n }

r { n ,}

r { n , m } Egy vagy két szám a kapcsos zárójelben egy intervallum kifejezés . 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 van elválasztva vesszővel, r ismétlődik n nak nek m alkalommal. Ha van egy szám, amelyet vessző követ, akkor r legalább meg kell ismételni n alkalommal.

Az intervallum kifejezései csak akkor állnak rendelkezésre, ha ezek közül bármelyik --posix vagy --re-intervallum a parancssorban van megadva.

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.

Karakterosztályok a POSIX szabvány új jellemzője. 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 szabályos kifejezésben érvényes belül a karakterlisták zárójelzései. A karakterosztályok tartalmazzák :, 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 tér nyomtatható, de nem látható, míg egy egy 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).

:tér:

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 alfabetikus és numerikus karaktereivel.

Két további speciális sorozatot jeleníthet meg a karakterlistákban. Ezek a nem ASCII karakterkészletekre vonatkoznak, amelyek egyetlen szimbólummal rendelkeznek (a összeállít elemek ), amelyek több karaktert tartalmaznak, valamint több olyan karakter is, amelyek egyenértékűek egybevetése , vagy rendezés, célok. (Például, francia nyelven, egy egyszerű "` e "és egy súlyos ékezetes e" egyenértékűek.)

A szimbólumok összegyűjtése

A gyűjtő szimbólum egy többkarakteres összeillesztési elem . és .. Például, ha ch akkor egy összefoglaló elem .Ch. egy szabályos kifejezés, amely megfelel ennek a gyűjtőelemnek, miközben CH egy szabályos kifejezés, amely megfelel mindkettőnek c vagy h.

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 = és =. Például a név e az "e", "e", "" és "e" kifejezésekre használhatók. "Ebben az esetben a" = E = egy szabályos kifejezés, amely megfelel bármelyiknek e, e”, vagy e`.

Ezek a funkciók nagyon értékesek a nem angol nyelvű helyeken. A könyvtár működik mamlasz a rendszeres kifejezésegyezéshez használt felhasználások jelenleg csak a POSIX karakterosztályokat ismerik fel; nem ismerik fel a szimbólumokat vagy egyenértékűségi osztályokat.

A y, B, <, >, w, W, `, és ' a szolgáltatók sajátosak mamlasz ; ezek a GNU rendszeres kifejezéskönyvtárakban található létesítményeken alapuló kiterjesztések.

A különböző parancssori opciók szabályozzák a módját mamlasz a karaktereket szabályos kifejezésekben értelmezi.

Nincs lehetőség

Az alapértelmezett esetben, mamlasz biztosítja a POSIX szabályos kifejezések és a fent leírt GNU reguláris kifejezést használó összes létesítményé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 megegyezik egy literal w). Az intervallum kifejezései megengedettek.

--hagyományos

Hagyományos Unix awk a rendszeres kifejezések illeszkednek. A GNU-operátorok nem speciálisak, az intervallum kifejezések nem állnak rendelkezésre, és sem a POSIX karakterosztály (: 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élyezze az intervallum kifejezéseket a szabályos kifejezésekben, akkor is, ha --hagyományos biztosított.

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 (** szintén használható, és **= az átruházási szolgáltató számára).

+ - !

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

* / %

Szorzás, osztás és modulus.

+ -

Összeadás és kivonás.

tér

Szöveges összefonódás.

< >

<= >=

!= == A rendszeres relációs szolgáltatók.

~ !~

Szabályos kifejezésegyezés, kizárt meccs. JEGYZET: Ne használj állandó állandó kifejezést (/ Foo /) az a bal oldalán ~ vagy !~. Csak egyet használjon a jobb oldalon. A kifejezés / foo / ~ exp jelentése ugyanaz (($ 0 ~ / foo /) ~ exp ). Ez általában nem mi volt a célja.

ban ben

Array tagság.

&&

Logikai ÉS.

||

Logikai VAGY.

?:

A C feltételes kifejezés. Ennek a formája van kif1 ? kif2 : kif3 . Ha kif1 igaz, a kifejezés értéke kif2 , ellenkező esetben kif3 . Csak egy a kif2 és kif3 értékelik.

= += -=

*= /= %= ^= Feladat. Mind abszolút feladat ( var = érték ) és az operátor-hozzárendelést (a többi formátumot) támogatja.

Ellenőrzési nyilatkozatok

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

ha ( feltétel ) nyilatkozat más nyilatkozat míg ( feltétel ) nyilatkozat csinál nyilatkozat míg ( feltétel ) a ( kif1 ; kif2 ; kif3 ) nyilatkozat a ( var ban ben sor ) nyilatkozat szünet Folytatni töröl sor index töröl sor kijárat kifejezés { nyilatkozatok }

I / O nyilatkozatok

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

Bezárás( fájl , hogyan )

Zárja be a fájlt, a csövet vagy az együttes eljárást. Az opcionális hogyan csak akkor szabad használni, ha a kétirányú cső egyik végét egy párhuzamos folyamatba zárja. Szintén string értéknek kell lennie "nak nek" vagy "tól től".

getline

Készlet $0 a következő beviteli rekordból; készlet NF, NR, FNR.

getline < fájl

Készlet $0 a következő rekordból fájl ; készlet NF.

getline var

Készlet var a következő beviteli rekordból; készlet NR, FNR.

getline var < fájl

Készlet var a következő rekordból fájl .

parancs | getline var

Fuss parancs csővezetékbe a kimenetet $0 vagy var , mint fent.

parancs & getline var

Fuss parancs mint egy együttes folyamat csővezeték a kimenetet vagy a $0 vagy var , mint fent. Az együttes folyamatok a mamlasz 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, a VÉGE blokk (ok), ha van ilyen.

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. FÁJL NÉV és ARGIND frissülnek, FNR visszaáll az 1-re, és a feldolgozás az AWK program első mintájával kezdődik. Ha elérte a bemeneti adatok végét, a VÉGE blokk (ok), ha van ilyen.

nyomtatás

Kinyomtatja az aktuális rekordot. A kimeneti rekord a ORS változó.

nyomtatás expr-list

Kinyomtatja a kifejezéseket. Minden kifejezést elválasztja a OFS változó. A kimeneti rekord a ORS változó.

nyomtatás expr-list > fájl

Kinyomtatja a kifejezést fájl . Minden kifejezést elválasztja a OFS változó. A kimeneti rekord a ORS változó.

printf fmt, expr-list

Formázás és nyomtatás.

printf fmt, expr-list > fájl

Formázni és nyomtatni fájl .

rendszer( cmd-line )

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

fflush ( fájl )

A nyílt kimeneti fájlhoz vagy csőhöz kapcsolódó puffereket öblítse le fájl . Ha fájl hiányzik, akkor a szabványos kimenet kifolyik. Ha fájl a null karakterlánc, akkor az összes nyitott kimeneti fájl és cső a puffereit kipukkanja.

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

nyomtatás … >> fájl

hozzáadja a kimenetet a fájl .

nyomtatás … | parancs

ír egy csőre.

nyomtatás … | parancs

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

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

JEGYZET: Ha csövet használ, vagy együtt dolgozik a getline, vagy a nyomtatás vagy printf egy hurkon belül te kell használat Bezárás() 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

Az AWK változatai printf kijelentés és sprintf () (lásd a