Nume
gawk - model de scanare și de prelucrare a limbii
Rezumat
bălălău Opțiuni stil POSIX sau GNU -f program de fișier -- fișier …bălălău Opțiuni stil POSIX sau GNU -- program de text fișier … pgawk Opțiuni stil POSIX sau GNU -f program de fișier -- fișier …pgawk Opțiuni stil POSIX sau GNU -- program de text fișier … Bălălău este implementarea Proiectului GNU a limbajului de programare AWK. Conform definiției limbii din standardul POSIX 1003.2 Command Language and Utilities. Această versiune, la rândul său, se bazează pe descrierea din Limba de programare AWK , de către Aho, Kernighan și Weinberger, cu caracteristicile suplimentare găsite în versiunea System V Release 4 a UNIX awk . Bălălău de asemenea, oferă mai recente Bell Laboratories awk extensii și o serie de extensii specifice GNU. Pgawk este versiunea de profil a bălălău . Este identic în toate privințele bălălău , cu excepția faptului că programele rulează mai încet și produce automat un profil de execuție în fișier awkprof.out cand e gata. Consultați --profil opțiune, de mai jos. Linia de comandă constă din opțiuni pentru bălălău ea însăși, textul programului AWK (dacă nu este furnizat prin -f sau --fişier opțiuni) și valori care trebuie să fie disponibile în argc și argv predefinite variabile AWK. Bălălău opțiunile pot fi opțiuni tradiționale POSIX cu o singură literă sau opțiuni lungi pentru stilul GNU. Opțiunile POSIX încep cu un singur `` - '', în timp ce opțiunile lungi încep cu `` - ''. Sunt disponibile opțiuni lungi atât pentru caracteristicile specifice GNU, cât și pentru funcțiile cu mandat POSIX. Urmând standardul POSIX, bălălău - opțiunile specifice sunt furnizate prin intermediul argumentelor către -W opțiune. Multiplu -W pot fi furnizate opțiuni -W opțiunea are o opțiune lungă corespunzătoare, după cum este detaliat mai jos. Argumentele pentru opțiunile lungi sunt fie asociate opțiunii cu o = semn, fără spații intermediare sau pot fi furnizate în argumentul următor al liniei de comandă. Opțiunile lungi pot fi abreviate, atât timp cât abrevierea rămâne unică. Bălălău acceptă următoarele opțiuni, listate în ordine alfabetică. -F fs --field-separator fs Utilizare fs pentru separatorul câmpului de intrare (valoarea lui FS predefinită). -v var = Val --atribui var = Val Alocați valoarea Val la variabila var , înainte de începerea execuției programului. Astfel de valori variabile sunt disponibile pentru ÎNCEPE bloc a unui program AWK. -f program de fișier --fişier program de fișier Citiți sursa programului AWK din fișier program de fișier , în loc de la primul argument din linia de comandă. Multiplu -f (sau --fişier) pot fi utilizate. -mf NNN -Dl NNN Setați limite de memorie diferite la valoare NNN . f steagul stabilește numărul maxim de câmpuri și r steagul stabilește dimensiunea maximă a înregistrării. Aceste două steaguri și -m sunt din versiunea de cercetare Bell Laboratories a UNIX awk . Ele sunt ignorate bălălău , de cand bălălău nu are limite predefinite. -W compat -W tradiționale --compat --tradiţional A alerga în compatibilitate Mod. În modul de compatibilitate, bălălău se comportă identic cu UNIX awk ; niciuna dintre extensiile specifice GNU nu este recunoscută. Utilizarea --tradiţional este preferată față de celelalte forme ale acestei opțiuni. Vedea Extensiile GNU, mai jos, pentru mai multe informații. -W copyleft -W drept de autor --copyleft --drepturi de autor Imprimați versiunea scurtă a mesajului informativ privind drepturile de autor GNU pe ieșirea standard și ieșiți cu succes. -W variabilele dump-ului= fişier --dump-variabile= fişier Imprimați o listă sortată de variabile globale, tipurile și valorile lor finale fişier . Daca nu fişier este furnizat, bălălău utilizează un fișier numit awkvars.out în directorul curent. Având o listă a tuturor variabilelor globale este o modalitate bună de a căuta erori tipografice în programele dvs. De asemenea, ați folosi această opțiune dacă aveți un program mare cu o mulțime de funcții și doriți să fiți sigur că funcțiile dvs. nu utilizează în mod inadvertent variabile globale pe care ați vrut să le utilizați la nivel local. (Aceasta este o greșeală deosebit de ușor de făcut cu nume de variabile simple, cum ar fi eu, j, si asa mai departe.) -W ajutor -W utilizare --Ajutor --usage Imprimați un rezumat relativ scurt al opțiunilor disponibile pe ieșirea standard. (Pe Standardele GNU de codificare , aceste opțiuni determină o ieșire imediată, cu succes.) -W sclipici= fatal --puf= fatal Oferiți avertismente cu privire la constructe care sunt dubioase sau non-portabile pentru alte implementări AWK. Cu un argument opțional din fatal, avertismentele pentru scame vor deveni erori fatale. Acest lucru poate fi drastic, dar utilizarea sa va încuraja cu siguranță dezvoltarea unor programe mai curate AWK. -W scârțâit --lint vechi Furnizați avertismente despre construcții care nu sunt portabile versiunii originale de Unix awk . -W gen-po --gen-po Scanați și analizați programul AWK și generați un GNU .po format la ieșirea standard cu intrări pentru toate șirurile localizabile din program. Programul în sine nu este executat. Vedeți GNU gettext distribuire pentru mai multe informații despre .po fișiere. -W date non-zecimale --non-decimal-date Recunoașteți valorile octale și hexazecimale din datele de intrare. Utilizați această opțiune cu mare atenție! -W posix --posix Aceasta se aprinde compatibilitate , cu următoarele restricții suplimentare: * X secvențele de evacuare nu sunt recunoscute. * Numai spațiul și fila funcționează ca separatoare de câmp când FS este setat la un singur spațiu, noua linie nu. * Nu puteți continua linii după ? și :. * Sinonimul FUNC pentru cuvântul cheie funcţie nu este recunoscut. * Operatorii ** și **= nu pot fi folosite în loc de ^ și ^=. * fflush () funcția nu este disponibilă. -W profil= prof_file --profil= prof_file Trimite datele de profil la prof_file . Valoarea implicită este awkprof.out. Când alergi cu bălălău , profilul este doar o versiune `` destul de tipărită '' a programului. Când alergi cu pgawk , profilul conține numărul de execuții al fiecărei instrucțiuni din program în marginea stângă și numărul apelurilor funcționale pentru fiecare funcție definită de utilizator. -W re-interval --re interval Activați utilizarea intervale expresii în potrivirea expresiei regulate (a se vedea Expresii obisnuite, mai jos). Expresiile de intervale nu erau disponibile în mod tradițional în limba AWK. Standardul POSIX le-a adăugat să le facă awk și egrep consecvente unul cu altul. Cu toate acestea, utilizarea lor ar putea întrerupe programele vechi AWK, deci bălălău le oferă doar dacă sunt solicitați cu această opțiune sau când --posix este specificat. -W sursă program de text --sursă program de text Utilizare program de text ca cod sursă program AWK. Această opțiune permite intermixarea ușoară a funcțiilor bibliotecii (folosită prin -f și --fişier opțiuni) cu codul sursă introdus pe linia de comandă. Acesta este destinat în principal pentru programele AWK medii și mari utilizate în scripturile shell. -W versiune --versiune Imprimați informații despre versiunea pentru această copie specifică bălălău pe ieșirea standard. Acest lucru este util, în principal, pentru a afla dacă copia curentă a bălălău pe sistemul dvs. este actualizat cu privire la distribuția Fundației Free Software Foundation. Acest lucru este, de asemenea, util atunci când raportați erori. (Pe Standardele GNU de codificare , aceste opțiuni determină o ieșire imediată, cu succes.) -- Semnați sfârșitul opțiunilor. Acest lucru este util pentru a permite mai multor argumente pentru ca programul AWK să înceapă cu un `` - ''. Aceasta este în principal pentru consecvența cu convenția de parsare argument utilizat de majoritatea programelor POSIX. În modul de compatibilitate, orice alte opțiuni sunt marcate ca nevalide, dar sunt altfel ignorate. În timpul funcționării normale, atâta timp cât textul programului a fost furnizat, opțiunile necunoscute sunt transmise programului AWK în argv matrice pentru procesare. Acest lucru este deosebit de util pentru rularea programelor AWK prin mecanismul de interpretare executabil "#!". Executarea programului AWK Un program AWK constă dintr-o secvență de instrucțiuni de acțiune-tip și definiții opționale ale funcțiilor. model { declarații de acțiune }funcţie Nume ( lista de parametri ) { declaraţii }
Bălălău citiți mai întâi sursa programului din program de fișier (e), dacă este specificat, de la argumente la --sursă, sau de la primul argument non-opțiune de pe linia de comandă. -f și --sursă opțiunile pot fi utilizate de mai multe ori pe linia de comandă. Bălălău citește textul programului ca și cum ar fi toate program de fișier s și textele sursă din linia de comandă au fost concatenate împreună. Acest lucru este util pentru construirea de biblioteci de funcții AWK, fără a trebui să le includeți în fiecare nou program AWK care le folosește. De asemenea, oferă posibilitatea de a combina funcțiile bibliotecii cu programele de linie de comandă. Variabila de mediu AWKPATH specifică o cale de căutare pe care să o folosească la găsirea fișierelor sursă numite cu -f opțiune. Dacă această variabilă nu există, calea implicită este":. / Usr / local / share / awk". (Directorul actual poate varia, în funcție de modul în care bălălău a fost construit și instalat.) Dacă un nume de fișier dat -f opțiunea conține un caracter `` / '', nu se efectuează nici o căutare de căi. Bălălău execută programele AWK în ordinea următoare. Mai întâi, toate atribuțiile variabile specificate prin intermediul funcției -v sunt efectuate. Următor →, bălălău compilează programul într-o formă internă. Atunci, bălălău execută codul în ÎNCEPE bloc (uri) (dacă există), și apoi continuă să citească fiecare fișier numit în argv matrice. Dacă nu există fișiere numite pe linia de comandă, bălălău citește intrarea standard. Dacă un nume de fișier pe linia de comandă are formularul var = Val acesta este tratat ca o atribuire variabilă. Variabila var va fi atribuită valoarea Val . (Acest lucru se întâmplă după orice ÎNCEPE au fost executate blocuri.) Alocarea de variabile de linie de comandă este cea mai utilă pentru alocarea dinamică a valorilor variabilelor folosite de AWK pentru a controla modul în care intrarea este fragmentată în câmpuri și înregistrări. De asemenea, este util pentru controlul stării dacă sunt necesare mai multe treceri pe un singur fișier de date. Dacă valoarea unui anumit element din argv este gol (''), bălălău trece peste el. Pentru fiecare înregistrare din intrare, bălălău teste pentru a vedea dacă se potrivește cu orice model în programul AWK. Pentru fiecare model care se potrivește înregistrării, asociat acțiune este executat. Modelele sunt testate în ordinea în care apar în program. În cele din urmă, după ce toate intrările sunt epuizate, bălălău execută codul în SFÂRȘIT bloc (uri) (dacă există). Variabilele AWK sunt dinamice; ele apar în momentul în care sunt utilizate pentru prima oară. Valorile lor sunt fie numere în virgulă mobilă, fie șiruri sau ambele, în funcție de modul în care sunt folosite. AWK are, de asemenea, o rețea de dimensiuni; arhitecturi cu dimensiuni multiple pot fi simulate. Mai multe variabile predefinite sunt setate ca un program care rulează; acestea vor fi descrise ca fiind necesare și rezumate mai jos. În mod normal, înregistrările sunt separate prin caractere noi. Puteți controla separarea înregistrărilor prin atribuirea de valori variabilei încorporate RS. Dacă RS este orice caracter unic, acel caracter separă înregistrările. In caz contrar, RS este o expresie regulată. Textul din intrarea care se potrivește cu această expresie regulată separă înregistrarea. Cu toate acestea, în modul de compatibilitate, pentru separarea înregistrărilor se utilizează numai primul caracter al valorii sale de șir. Dacă RS este setat la șirul nul, apoi înregistrările sunt separate prin linii goale. Cand RS este setat la șirul nul, caracterul newline acționează întotdeauna ca separator de câmp, în plus față de orice valoare FS ar putea avea. Ca fiecare înregistrare de intrare este citit, bălălău împarte înregistrarea în câmpuri , folosind valoarea lui FS variabil ca separator de câmp. Dacă FS este un singur caracter, câmpurile sunt separate de acel caracter. Dacă FS este șirul nul, atunci fiecare personaj individual devine un câmp separat. In caz contrar, FS este de așteptat să fie o expresie regulată completă. În cazul special FS este un singur spațiu, câmpurile sunt separate prin rularea spațiilor și / sau filelor și / sau liniilor noi. (Dar vedeți discuția despre --posix, mai jos). NOTĂ: Valoarea a IGNORECASE (a se vedea mai jos) afectează de asemenea felul în care sunt împărțite câmpurile FS este o expresie regulată și cum sunt separate înregistrările când RS este o expresie regulată. În cazul în care FIELDWIDTHS variabila este setată la o listă de numere separate de spațiu, fiecare câmp este de așteptat să aibă o lățime fixă și bălălău împarte înregistrarea folosind lățimile specificate. Valoarea a FS este ignorată. Alocarea unei noi valori pentru FS suprascrie utilizarea FIELDWIDTHS, și restabilește comportamentul implicit. Fiecare câmp din înregistrarea de intrare poate fi referit de poziția sa, $1, $2, si asa mai departe. $0 este întreaga înregistrare. Domeniile nu trebuie să fie menționate prin constante: n = 5tip $ n imprimă al cincilea câmp din înregistrarea de intrare. Variabila NF este setat la numărul total de câmpuri din înregistrarea de intrare. Referințele la câmpuri inexistente (adică câmpuri după $ NF) produc șirul nul. Cu toate acestea, atribuirea unui câmp inexistent (de ex. $ (NF + 2) = 5) mărește valoarea NF, creează orice câmpuri care intervin cu sirul nul ca valoare și provoacă valoarea lui $0 pentru a fi recompuse, câmpurile fiind separate de valoarea lui OFS. Referințele la câmpurile numerotate negative cauzează o eroare fatală. decrementing NF determină pierderea valorii câmpurilor dincolo de noua valoare și valoarea lui $0 pentru a fi recompuse, câmpurile fiind separate de valoarea lui OFS. Alocarea unei valori unui câmp existent determină reconstruirea întregii înregistrări atunci când $0 este menționat. În mod similar, atribuirea unei valori $0 determină repetarea înregistrării, creând noi valori pentru câmpuri. Bălălău variabilele încorporate sunt: argc Numărul de argumente ale liniei de comandă (nu include opțiunile pentru bălălău , sau sursa programului). ARGIND Indicele din argv din fișierul curent care este procesat. argv Array de argumente de linie de comandă. Matricea este indexată de la 0 la argc - 1. Modificarea dinamică a conținutului argv poate controla fișierele utilizate pentru date. BINMODE Pe sistemele non-POSIX, se specifică utilizarea modului "binar" pentru toate intrările / ieșirile fișierelor. Valorile numerice de 1, 2 sau 3 specifică că fișierele de intrare, fișierele de ieșire sau toate fișierele ar trebui să utilizeze I / O binare. Valorile șirului "R", sau "W" specificați că fișierele de intrare sau fișierele de ieșire ar trebui să utilizeze I / O binare. Valorile șirului "Rw" sau "Wr" specificați că toate fișierele ar trebui să utilizeze I / O binare. Orice altă valoare de șir este tratată ca "Rw", dar generează un mesaj de avertizare. CONVFMT Formatul de conversie pentru numere, "% .6g", în mod implicit. ENVIRON O matrice care conține valorile mediului actual. Matricea este indexată de variabilele de mediu, fiecare element fiind valoarea acelei variabile (de exemplu,ENVIRON "HOME" ar putea fi / Home / arnold). Modificarea acestei matrice nu afectează mediul văzut de programele care bălălău spawns prin redirecționare sau sistem()funcţie. errno Dacă apare o eroare de sistem, efectuați o redirecționare pentru getline, în timpul unei citiri getline, sau în timpul a închide(), atunci errno va conține un șir care descrie eroarea. Valoarea este supusă traducerii în locații non-engleză. FIELDWIDTHS O listă de lățimi de câmp separate în spațiul alb. Când este setat, bălălău analizează intrarea în câmpuri de lățime fixă, în loc să folosească valoarea lui FS variabil ca separator de câmp. NUME DE FIȘIER Numele fișierului de intrare curent.Dacă nu sunt specificate fișiere în linia de comandă, valoarea lui NUME DE FIȘIER este `` - ''. In orice caz, NUME DE FIȘIER este nedefinit în interiorul ÎNCEPE bloc (dacă nu este setat de getline). FNR Numărul de înregistrare de intrare din fișierul de intrare curent. FS Separatorul câmpului de introducere, un spațiu implicit. Vedea Câmpuri, de mai sus. IGNORECASE Controlează sensibilitatea cazului pentru toate operațiile de expresie regulată și de șir. Dacă IGNORECASE are o valoare non-zero, apoi comparații șir și potrivire model în reguli, împărțirea câmpului cu FS, înregistrează separarea cu RS, potrivirea expresiei regulate cu ~și !~, si gensub (), gsub (), index(), Meci(), Despică(), și sub () funcțiile încorporate ignoră toate cazurile atunci când fac operații de expresie regulată. NOTĂ: Arborele subscript este nu afectat, nici nu este asort () funcţie. Astfel, dacă IGNORECASE nu este egal cu zero, / AB / potrivește toate șirurile "Ab", "AB","Ab", și "AB". Ca și în cazul tuturor variabilelor AWK, valoarea inițială a lui IGNORECASE este zero, astfel încât toate operațiunile de expresie regulată și de șir sunt în mod normal sensibile la litere mici. Sub Unix, setul complet de caractere ISO 8859-1 Latin-1 este utilizat atunci când ignorăm cazul. PUF Oferă control dinamic al --puf opțiune dintr-un program AWK. Când este adevărat, bălălău imprimă avertismente pentru scame. Când este fals, nu se întâmplă. Când este atribuită valoarea șirului "fatal", avertismentele pentru scame vor deveni erori fatale, exact cum ar fi --lint = fatal. Orice altă valoare adevărată imprimă avertismente. NF Numărul de câmpuri din înregistrarea curentă de intrare. NR Numărul total de înregistrări de intrare văzute până acum. OFMT Formatul de ieșire pentru numere, "% .6g", în mod implicit. OFS Separatorul câmpului de ieșire, un spațiu implicit. ORS Separatorul de înregistrări de ieșire, implicit o nouă linie. PROCINFO Elementele acestei matrice oferă acces la informații despre programul AWK care rulează. La unele sisteme, pot exista elemente în matrice, "Grupa 1" prin "grup n ' pentru unii n , care este numărul de grupuri suplimentare pe care le are procesul. Folosește în operator pentru a testa aceste elemente. Sunt disponibile următoarele elemente: PROCINFO "Egid" valoarea getegid (2) apel sistem. PROCINFO "EUID" valoarea geteuid (2) apel sistem. PROCINFO "FS" "FS" dacă se împrăștie câmpul cu FS este în vigoare sau "FIELDWIDTHS" dacă se împrăștie câmpul cu FIELDWIDTHS este în vigoare. PROCINFO "TIS" valoarea getgid (2) apel sistem. PROCINFO "pgrpid" ID-ul grupului de proces al procesului curent. PROCINFO "BIP" procesul de identificare al procesului curent. PROCINFO "ppid" ID-ul procesului părinte al procesului curent. PROCINFO "uid" valoarea getuid (2) apel sistem. RS Separatorul de înregistrări de intrare, implicit un rând nou. RT Terminatorul de înregistrări. Bălălău seturi RT la textul de intrare care corespunde caracterului sau expresiei regulate specificate de RS. RSTART Indicele primului caracter al lui Meci(); 0 dacă nu se potrivește. (Aceasta implică faptul că indicii de caractere încep de la unu.) RLENGTH Lungimea șirului potrivită de Meci(); -1 dacă nu se potrivește. SUBSEP Caracterul utilizat pentru a separa mai multe indicatori în elemente de matrice, în mod implicit ' 034'. DOMENIU_TEXT Domeniul de text al programului AWK; folosit pentru a găsi traducerile localizate pentru șirurile programului. Arrays sunt abonați cu o expresie între paranteze pătrate ( și ). Dacă expresia este o listă de expresii ( expr , expr …), atunci indicele matricei este un șir constând din concatenarea valorii (șirului) fiecărei expresii, separate de valoarea SUBSEP variabil. Această facilitate este utilizată pentru a simula matrice multiplicate. De exemplu: i = "A"; j = "B"; k = "C"x i, j, k = "salut, lume n" atribuie șirul "salut, lume n" la elementul matricei X care este indexat de șir"A 034B 034C". Toate matricele din AWK sunt asociative, adică indexate prin valorile șirului. Operatorul special în pot fi utilizate într-o dacă sau in timp ce pentru a vedea dacă o matrice are un index format dintr-o anumită valoare. dacă (val în matrice) array de imprimare val Dacă matricea are mai multe indexuri, utilizați (i, j) în matrice. în construct poate fi, de asemenea, utilizat într-o pentru buclă pentru a itera peste toate elementele unui matrice. Un element poate fi șters dintr - o matrice utilizând șterge afirmație. șterge instrucțiunea poate fi de asemenea folosită pentru a șterge întregul conținut al unei matrice, doar prin specificarea numelui matricei fără un indice. Variabilele și câmpurile pot fi numere (puncte în virgulă mobilă) sau șiruri sau ambele. Cum se interpretează valoarea unei variabile depinde de contextul acesteia. Dacă este utilizat într-o expresie numerică, va fi tratat ca un număr, dacă este folosit ca șir, acesta va fi tratat ca un șir. Pentru a forța o variabilă care trebuie tratată ca număr, adăugați 0 la ea; pentru ao forța să fie tratată ca un șir, să o concatenăm cu șirul nul. Atunci când un șir trebuie convertit la un număr, conversia se realizează utilizând strtod (3). Un număr este convertit într-un șir utilizând valoarea de CONVFMT ca șir de format pentru sprintf (3), cu valoarea numerică a variabilei ca argument. Cu toate acestea, chiar dacă toate numerele în AWK sunt punct de plutire, valorile integrale sunt mereu convertite ca numere întregi. Astfel, dat CONVFMT = "% 2.2f" a = 12 b = a "" variabila b are o valoare de șir '12' si nu '12.00'. Bălălău efectuează comparații după cum urmează: Dacă două variabile sunt numerice, ele sunt comparate numeric. Dacă o valoare este numerică, iar cealaltă are o valoare de șir care este un "șir numeric", atunci se fac și comparații numerice. În caz contrar, valoarea numerică este convertită la un șir și se efectuează o comparație de șir. Două șiraguri sunt comparate, firește, ca șiruri de caractere. Rețineți că standardul POSIX aplică conceptul de "șir numeric" peste tot, chiar și la constantele string. Cu toate acestea, acest lucru este în mod clar incorect și bălălău nu face asta. (Din fericire, acest lucru este stabilit în următoarea versiune a standardului.) Rețineți că constantele șirului, cum ar fi '57', sunteți nu valori numerice, acestea sunt constante de șir. Ideea de "șir numeric" se aplică numai câmpurilor, getline intrare, NUME DE FIȘIER, argv elemente, ENVIRON elementele și elementele unei matrice create de Despică() care sunt șiruri numerice. Ideea de bază este aceea intrarea utilizatorului , iar numai intrarea utilizatorului, care arată numeric, ar trebui tratată în acest fel. Variabilele neinitializate au valoarea numerică 0 și valoarea șirului "" (șirul nul sau gol). Începând cu versiunea 3.1 din gawk, puteți utiliza constante octal și hexazecimal în stilul dvs. de program AWK. De exemplu, valoarea octal 011 este egal cu zecimal 9, și valoarea hexazecimală 0x11 este egal cu zecimal 17. Conținuturile de coarde din AWK sunt secvențe de caractere închise între ghilimele duble ('). În interiorul șirurilor, sigur secvențe de evacuare sunt recunoscute, ca în C. Acestea sunt: \ O retrospectivă literală. A Caracterul "alertă"; de obicei caracterul ASCII BEL. b backspace. f formular-feed. n linie nouă. r retur transport. t orizontală. v verticală. X hex cifre Caracterul reprezentat de șirul de cifre hexazecimale care urmează X. Ca și în ANSIC, toate următoarele cifre hexazecimale sunt considerate parte a secvenței de evacuare. (Această caracteristică ar trebui să ne spună ceva despre proiectarea limbajului de către comitet.) De exemplu, " X1b" este caracterul ASCIIESC (escape). ddd Caracterul reprezentat de secvența de 1-, 2 sau 3 cifre a cifrelor octale. De exemplu., ' 033' este caracterul ASCII ESC (escape). c Caracterul literal c . Secvențele de evacuare pot fi de asemenea utilizate în expresii regulate constante (de exemplu,/ t f n r v / se potrivește cu caracterele spațiului alb). În modul de compatibilitate, caracterele reprezentate de secvențe de evacuare octale și hexazecimale sunt tratate literal când sunt utilizate în constante de expresie regulată. Prin urmare, / O 52b / este echivalent cu/ A * b /. AWK este un limbaj orientat spre linie. Modelul vine mai întâi și apoi acțiunea. Declarațiile de acțiune sunt închise în { și }. Fie modelul poate lipsi, fie acțiunea poate lipsi, dar, desigur, nu ambele. Dacă modelul lipsește, acțiunea este executată pentru fiecare înregistrare de intrare. O acțiune lipsă este echivalentă cu { imprimare } care imprimă întreaga înregistrare. Comentariile încep cu caracterul "#" și continuă până la sfârșitul liniei. Linile libere pot fi utilizate pentru a separa declarațiile. În mod normal, o declarație se termină cu o linie nouă, însă nu este cazul pentru liniile care se termină într-un ``, '', {, ?, :, &&, sau ||. Linii care se termină do sau altfel de asemenea, afirmațiile lor continuă automat pe următoarea linie. În alte cazuri, o linie poate fi continuată terminând cu un ", caz în care noua linie va fi ignorată. Mai multe declarații pot fi plasate pe o singură linie, separându-le cu un ``; ''. Acest lucru se aplică atât afirmațiilor din cadrul părții de acțiune a unei perechi de modele-acțiune (cazul obișnuit), cât și declarațiilor de acțiune-tip. Modelele AWK pot fi una dintre următoarele: ÎNCEPE SFÂRȘIT / expresie uzuala / expresia relațională model && model model || model model ? model : model ( model ) ! model pattern1 , pattern2 ÎNCEPE și SFÂRȘIT sunt două tipuri speciale de modele care nu sunt testate față de intrare. Părțile de acțiune ale tuturor ÎNCEPE modelele sunt combinate ca și cum toate declarațiile ar fi fost scrise într-un singur ÎNCEPE bloc. Acestea sunt executate înainte de citirea oricăror intrări. În mod similar, toate SFÂRȘIT blocurile sunt fuzionate și executate atunci când toate intrările sunt epuizate (sau atunci când un Ieșire declarația este executată). ÎNCEPE și SFÂRȘIT modelele nu pot fi combinate cu alte modele în expresiile de model. ÎNCEPE și SFÂRȘIT modelele nu pot lipsi din părțile de acțiune. Pentru / expresie uzuala / , instrucțiunea asociată este executată pentru fiecare înregistrare de intrare care se potrivește cu expresia regulată. Expresiile regulate sunt aceleași cu cele din egrep (1) și sunt rezumate mai jos. A expresia relațională poate utiliza oricare dintre operatorii definiți mai jos în secțiunea despre acțiuni. Acestea testează, în general, dacă anumite câmpuri se potrivesc cu anumite expresii regulate. &&, ||, și ! operatorii sunt logici AND, logic OR, și NOT logic, respectiv, ca în C. Ei fac o evaluare de scurtcircuit, de asemenea ca și în C, și sunt folosiți pentru combinarea unor expresii mai primitive de tipar. Ca în majoritatea limbilor, parantezele pot fi folosite pentru a schimba ordinea de evaluare. ?: operatorul este ca și același operator în C. Dacă primul model este adevărat atunci modelul folosit pentru testare este cel de-al doilea model, altfel este al treilea. Se evaluează numai unul din cel de-al doilea și al treilea model. pattern1 , pattern2 forma unei expresii este numită a model de gamă . Se potrivește cu toate înregistrările de intrare începând cu o înregistrare care se potrivește pattern1 , și continuând până când o înregistrare se potrivește pattern2 , inclusiv. Nu se combină cu nici un fel de expresie a modelului. Expresiile regulate sunt tipul extins descoperit în egrep . Acestea sunt compuse din caractere după cum urmează: c se potrivește cu non-metacaracter c . c se potrivește cu caracterul literal c . . se potrivește cu orice personaj inclusiv linie nouă. ^ se potrivește cu începutul unui șir. $ se potrivește cu sfârșitul unui șir. abc … lista de caractere, se potrivește cu oricare dintre caractere abc … . ^ abc … lista de caractere negată, se potrivește cu orice caracter, cu excepția abc … . r1 | r2 alternanță: se potrivește fie cu una r1 sau r2 . R1R2 concatenare: meciuri r1 , și apoi r2 . r + se potrivește cu una sau mai multe r E. r * se potrivește cu zero sau mai mult r E. r ? se potrivește cu zero sau cu una r E. ( r ) grupare: meciuri r . r { n } r { n ,} r { n , m } Unu sau doi numere în interiorul bretelelor denotă o interval de exprimare . Dacă există un număr în bretele, expresia obișnuită precedentă r se repetă n ori. Dacă există două numere separate printr-o virgulă, r se repetă n la m ori. Dacă există un număr urmat de o virgulă, atunci r se repetă cel puțin n ori. Intervalele de expresie sunt disponibile numai dacă există --posix sau --re interval este specificat pe linia de comandă. y se potrivește cu șirul gol la începutul sau la sfârșitul unui cuvânt. B se potrivește cu șirul gol într-un cuvânt. < se potrivește cu șirul gol la începutul unui cuvânt. > se potrivește cu șirul gol la sfârșitul unui cuvânt. w corespunde oricărui cuvânt-element constitutiv (literă, cifră sau subliniere). W potrivește cu orice caracter care nu este cuvânt constitutiv. ` se potrivește cu șirul gol la începutul unui buffer (șir). ' se potrivește cu șirul gol la sfârșitul tamponului. Secvențele de evacuare valide în constantele string (vezi mai jos) sunt valabile și în expresiile regulate. Clase de caractere sunt o caracteristică nouă introdusă în standardul POSIX. O clasă de caractere este o notație specială pentru descrierea listelor de caractere care au un atribut specific, dar în care caracterele reale pot varia de la o țară la alta și / sau de la un set de caractere la un set de caractere. De exemplu, noțiunea de caracter alfabetic diferă în SUA și în Franța. O clasă de caractere este valabilă doar într-o expresie regulată interior parantezele unei liste de caractere. Clasele de caractere sunt formate din :un cuvânt cheie care denotă clasa și :. Clasele de caractere definite de standardul POSIX sunt: : Alnum: Caractere alfanumerice. :alfa: Caractere alfabetice. :gol: Spațiu sau caractere tab. : Cntrl: Controlează caracterele. :cifră: Caractere numerice. :grafic: Caractere care pot fi tipărite și vizibile. (Un spațiu este imprimabil, dar nu vizibil, în timp ce un A este ambele.) :inferior: Caractere alfabetice cu litere mici. :imprimare: Caractere tipărite (caractere care nu sunt caractere de control.) : Punct: Caractere de punctuație (caractere care nu sunt litere, cifre, caractere de control sau caractere spațiale). :spaţiu: Caractere spațioase (cum ar fi spațiu, fila și formate, pentru a numi câteva). :superior: Caractere alfabetice de caractere superioare. : Xdigit: Caractere care sunt cifre hexazecimale. De exemplu, înainte de standardul POSIX, pentru a se potrivi cu caracterele alfanumerice, ar fi trebuit să scrieți / A-Za-Z0-9 /. Dacă setul dvs. de caractere avea alte caractere alfabetice, acest lucru nu s-ar potrivi cu acestea, iar dacă setul dvs. de caractere este comparat diferit cu ASCII, este posibil ca acesta să nu corespundă nici măcar caracterelor alfanumerice ASCII. Cu clasele de caractere POSIX, puteți scrie/ : Alnum: /, iar aceasta se potrivește cu caracterele alfabetice și numerice din setul de caractere. Două secvențe suplimentare pot apărea în listele de caractere. Acestea se aplică seturilor de caractere non-ASCII, care pot avea simboluri unice (numite elemente de colaționare ) care sunt reprezentate cu mai mult de un caracter, precum și mai multe caractere care sunt echivalente pentru colaționarea , sau sortare, scopuri. (De exemplu, în limba franceză, un câmp simplu "e" și un accent grav "sunt echivalente.) Simbolurile de colaționare Un simbol de colocare este un element de colocare multi-caractere inclus în . și .. De exemplu, dacă ch este un element de colaționare .Ch. este o expresie regulată care se potrivește cu acest element de colaționare, în timp ce Ch este o expresie regulată care se potrivește fie cu una c sau h. Clase de echivalență O clasă de echivalență este un nume specific localizării pentru o listă de caractere echivalente. Numele este inclus în = și =. De exemplu, numele e ar putea fi folosite pentru a reprezenta toate "e", "e", "și" e "." În acest caz, = E = este o expresie regulată care se potrivește cu oricare dintre ele e, e“, sau e`. Aceste caracteristici sunt foarte valoroase în localitățile care nu vorbesc limba engleză. Biblioteca funcționează astfel bălălău utilizările pentru potrivirea expresiilor regulate recunosc în prezent doar clasele de caractere POSIX; ei nu recunosc simbolurile de clasificare sau clasele de echivalență. y, B, <, >, w, W, `, și ' operatorii sunt specifici pentru bălălău ; acestea sunt extensii bazate pe facilități din bibliotecile de expresii regulate ale GNU. Diferitele opțiuni de linie de comandă controlează modul în care bălălău interpretează caracterele în expresii regulate. Nu există opțiuni În cazul implicit, bălălău furnizați toate facilitățile expresiilor regulate POSIX și operatorii de expresie regulată GNU descris mai sus. Cu toate acestea, expresiile de intervale nu sunt acceptate. --posix Se acceptă numai expresii regulate POSIX, operatorii GNU nu sunt speciali. (De exemplu., w se potrivește cu un literal w). Intervalele de expresie sunt permise. --tradiţional Unix tradițional awk expresiile regulate sunt potrivite. Operatorii GNU nu sunt speciali, expresiile de interval nu sunt disponibile și nici nu sunt clasele de caractere POSIX (: Alnum: si asa mai departe). Caracterele descrise de secvențele de evacuare octale și hexazecimale sunt tratate literal, chiar dacă acestea reprezintă metacaractere de expresie regulată. --re interval Permite expresii de intervale în expresii regulate, chiar dacă --tradiţional a fost furnizat. Declarațiile de acțiune sunt cuprinse în bretele, { și }. Declarațiile de acțiune constau în afirmații obișnuite, afirmații condiționate și looping găsite în majoritatea limbilor. Operatorii, declarațiile de control și declarațiile de intrare / ieșire disponibile sunt modelate după cele din C. Operatorii din AWK, în ordinea descrescătoare a prevalenței, sunt (…) Gruparea $ Referința câmpului. ++ -- Creșterea și scăderea, atât prefixul cât și postfixul. ^ Exponentiere (** pot fi de asemenea utilizate și **= pentru operatorul de atribuire). + - ! Unary plus, minus unar și negare logică. * / % Înmulțire, împărțire și modul. + - Adunare si scadere. spaţiu Coordonarea șirului. < > <= >= != == Operatorii relaționali obișnuiți. ~ !~ Ordinea expresiei regulate, potrivirea negată. NOTĂ: Nu utilizați o expresie constantă regulată (/ Foo /) pe partea stângă a unui a ~ sau !~. Utilizați unul numai pe partea dreaptă. Expresia / foo / ~ exp are același înțeles (($ 0 ~ / foo /) ~ exp ). Aceasta este de obicei nu ce a fost intenționat. în Array membru. && Logic AND. || Logic OR. ?: Expresia condiționată C. Aceasta are forma Expr1 ? expr2 : expr3 . Dacă Expr1 este adevărat, valoarea expresiei este expr2 , altfel este expr3 . Doar unul expr2 și expr3 este evaluată. = += -= *= /= %= ^= Misiune. Atât alocarea absolută ( var = valoare ) și asignarea operatorului (celelalte forme) sunt acceptate. Declarațiile de control sunt după cum urmează: dacă ( condiție ) afirmație altfel afirmație in timp ce ( condiție ) afirmație do afirmație in timp ce ( condiție ) pentru ( Expr1 ; expr2 ; expr3 ) afirmație pentru ( var în mulțime ) afirmație pauză continua șterge mulțime index șterge mulțime Ieșire expresie { declaraţii } Instrucțiunile de intrare / ieșire sunt următoarele: închide( fişier , Cum ) Închideți fișierul, țevile sau co-procesarea. Opțional Cum ar trebui să fie utilizat numai atunci când închideți un capăt al unei țevi bidirecționale într-un co-proces. Trebuie să fie și o valoare de șir "la" sau "din". getline A stabilit $0 din următoarea înregistrare de intrare; a stabilit NF, NR, FNR. getline < fişier A stabilit $0 din următoarea înregistrare din fişier ; a stabilit NF. getline var A stabilit var din următoarea înregistrare de intrare; a stabilit NR, FNR. getline var < fişier A stabilit var din următoarea înregistrare din fişier . comanda | getline var Alerga comanda conducând ieșirea fie în $0 sau var , ca mai sus. comanda & getline var Alerga comanda ca o conductă de co-procesare a ieșirii fie în $0 sau var , ca mai sus. Co-procesele sunt a bălălău extensie. Următor → Opriți procesarea înregistrării curente de intrare. Următoarea înregistrare de intrare este citită, iar procesarea începe cu primul model din programul AWK. Dacă se ajunge la sfârșitul datelor de intrare, SFÂRȘIT bloc (uri), dacă există, sunt executate. nextfile Opriți procesarea fișierului de intrare curent. Următoarea înregistrare de intrare este citită din următorul fișier de intrare. NUME DE FIȘIER și ARGIND sunt actualizate, FNR este resetată la 1, iar prelucrarea începe cu primul model din programul AWK. Dacă se ajunge la sfârșitul datelor de intrare, SFÂRȘIT bloc (uri), dacă există, sunt executate. imprimare Tipărește înregistrarea curentă. Înregistrarea de ieșire este terminată cu valoarea ORS variabil. imprimare expr-list Imprimă expresii. Fiecare expresie este separată de valoarea lui OFS variabil. Înregistrarea de ieșire este terminată cu valoarea ORS variabil. imprimare expr-list > fişier Imprimă expresii pe fişier . Fiecare expresie este separată de valoarea lui OFS variabil. Înregistrarea de ieșire este terminată cu valoarea ORS variabil. printf fmt, expr-list Formatați și tipăriți. printf fmt, expr-list > fişier Formatați și imprimați fişier . sistem( cmd-line ) Executați comanda cmd-line , și returnează starea de ieșire. (Este posibil ca acesta să nu fie disponibil în sistemele non-POSIX.) fflush ( fişier ) Îndepărtați toate tampoanele asociate fișierului sau țevii de ieșire deschise fişier . Dacă fişier lipsește, apoi ieșirea standard este spălată. Dacă fişier este șirul nul, apoi toate fișierele de ieșire deschise și țevile au tampoanele lor spălate. Sunt permise redirecționări adiționale suplimentare imprimare și printf. print … >> fişier adaugă ieșirea la fişier . tipăriți … | comanda scrie pe o țeavă. print … | comanda trimite datele către un co-proces. getline comanda returnează 0 la sfârșitul fișierului și -1 pentru o eroare. La o eroare, errno conține un șir care descrie problema. NOTĂ: Dacă folosiți o conductă sau un proces de co-procesare getline, sau de la imprimare sau printf într-o buclă, tu trebuie sa utilizare închide() pentru a crea noi instanțe ale comenzii. AWK nu închide automat conductele sau co-procesele atunci când se întorc la EOF. Versiunile AWK ale printf declarație și sprintf () (a se vedea mai jos) acceptă următoarele formate de specificații de conversie: % c Un caracter ASCII. Dacă argumentul folosit pentru % c este numeric, este tratat ca un caracter și tipărit. În caz contrar, argumentul este presupus a fi un șir, iar singurul prim caracter al acelui șir este tipărit. % d, % i Un număr zecimal (partea intregă). % e,% E Un număr în virgulă mobilă a formularului - d.dddddde + - dd. % E formate E in loc de e. % f Un număr în virgulă mobilă a formularului - ddd.dddddd. % g,% G Utilizare % e sau % f conversie, oricare dintre acestea este mai scurtă, cu zerouri nesemnificative suprimate.% G formate % E in loc de % e. % o Un număr octal nesemnat (de asemenea un număr întreg). % u Un număr zecimal nesemnat (din nou, un număr întreg). % s Un șir de caractere. % x,% X Un număr hexazecimal nesemnat (un număr întreg). %X formate ABCDEF in loc deabcdef. %% Un singur % caracter; nici un argument nu este convertit. Opțional, parametrii suplimentari pot fi situați între % și scrisoarea de control: numara $ Folosește numara argument în acest moment în formatare. Aceasta se numește a indicatorul de poziție și este destinat în primul rând pentru utilizarea în versiunile traduse ale formatelor de format, nu în textul original al unui program AWK. Este un bălălău extensie. - Expresia ar trebui să fie lăsată justificată în câmpul său. spaţiu Pentru conversiile numerice, prefixul are valori pozitive cu un spațiu și valori negative cu un semn minus. + Semnul plus, folosit înainte de modificatorul de lățime (vezi mai jos), spune să furnizeze întotdeauna un semn pentru conversii numerice, chiar dacă datele care trebuie formatate sunt pozitive. + suprascrie modificatorul de spațiu. # Utilizați un "formular alternativ" pentru anumite litere de control. Pentru % o, furnizați un zero zero. Pentru %X, și %X, furnizarea unui lider 0x sau 0X pentru un rezultat nonzero. Pentru % e, % E, și % f, rezultatul conține întotdeauna un punct zecimal. Pentru % g, și % G, nu se elimină zerourile de la rezultat. 0 O conducere 0 (zero) acționează ca un pavilion, care indică faptul că ieșirea ar trebui să fie căptușită cu zerouri în loc de spații. Acest lucru se aplică și în cazul formatelor de ieșire non-numerice. Acest steguleț are efect numai când lățimea câmpului este mai mare decât valoarea de imprimat. lăţime Câmpul trebuie căptușit până la această lățime. Câmpul este în mod obișnuit căptușit cu spații. În cazul în care 0steagul a fost folosit, este căptușit cu zerouri. . prec Un număr care specifică precizia de utilizat la imprimare. Pentru % e, % E, și % fformate, aceasta specifică numărul de cifre pe care doriți să le tipăriți în partea dreaptă a punctului zecimal. Pentru % g, și % G formate, specifică numărul maxim de cifre semnificative. Pentru % d, % o, % i, % u, %X, și %X formate, specifică numărul minim de cifre de imprimat. Pentru % s, specifică numărul maxim de caractere din șirul care trebuie imprimat. Dinamica lăţime și prec capacitățile ANSI C printf () sunt sprijinite rutinele. A * în loc de lăţime sau prec specificațiile determină ca valorile lor să fie luate din lista de argumente la printf sau sprintf (). Pentru a utiliza un specificator de poziție cu o lățime sau precizie dinamică, furnizați numara $ după * în șirul format. De exemplu, "% 3 $ * 2 $. * 1 $ s". Când efectuați redirecționarea I / O din oricare dintre ele imprimare sau printf într-un fișier, sau prin intermediul getline dintr-un fișier, bălălău recunoaște anumite nume de fișiere speciale pe plan intern. Aceste nume de fișiere permit accesul la descriptorii de fișiere de la care au fost moșteniți bălălău (de obicei shell-ul). Aceste nume de fișiere pot fi utilizate și pe linia de comandă pentru a numi fișierele de date. Numele de fișiere sunt: / Dev / stdin Intrarea standard. / Dev / stdout Rezultatul standard. / Dev / stderr Eroarea standard a erorii. / Dev / fd / n Fișierul asociat cu descriptorul de fișiere deschis n . Acestea sunt deosebit de utile pentru mesajele de eroare. De exemplu: tipăriți "Ai explodat!" > "/ dev / stderr" în timp ce altfel ar trebui să le folosiți tipăriți "Ai explodat!" | "pisica 1> & 2" Următoarele nume de fișiere speciale pot fi utilizate cu |& operatorul co-proces pentru crearea conexiunilor de rețea TCP / IP. / Inet / tcp / lport / rhost / rport Fișier pentru conexiunea TCP / IP pe portul local lport la gazdă la distanță rhost pe portul de la distanță rport . Utilizați un port de 0 pentru ca sistemul să aleagă un port. / Inet / udp / lport / rhost / rport Simi
Descriere
Format opțiune
Opțiuni
Variabile, înregistrări și câmpuri
Înregistrări
Câmpuri
Variabile construite
Arrays
Tastarea și conversia variabilelor
Constante octale și hexazecimale
String Constante
Modele și acțiuni
Modele de
Expresii obisnuite
acţiuni
operatorii
Contracte de control
Declarații I / O
Declarația printf
Nume speciale de fișiere