EnglezăFrancezăSpaniolă

Ad


Favicon OnWorks

gawk - Online în cloud

Rulați gawk în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda gawk care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


gawk - limbaj de scanare și procesare a modelelor

REZUMAT


bălălău [Opțiuni de stil POSIX sau GNU] -f fişier-program [ -- ] fișier...
bălălău [ Opțiuni de stil POSIX sau GNU ] [ -- ] program-text dosar ...

DESCRIERE


Bălălău este implementarea de către Proiectul GNU a limbajului de programare AWK. Se conformează
definiția limbajului în standardul POSIX 1003.1. Această versiune la rândul ei este
pe baza descrierii din AWK Programare Limbă, de Aho, Kernighan și
Weinberger. Bălălău oferă caracteristicile suplimentare găsite în versiunea actuală a lui Brian
a lui Kernighan Wow și o serie de extensii specifice GNU.

Linia de comandă constă din opțiuni pentru bălălău în sine, textul programului AWK (dacă nu este furnizat
prin intermediul -f or --fişier opțiuni) și valorile care vor fi disponibile în ARGC și ARGV pre-
variabile AWK definite.

Cand bălălău este invocat cu --profil opțiunea, începe să adune statistici de profilare
de la executarea programului. Bălălău rulează mai lent în acest mod și automat
produce un profil de execuție în fișier awkprof.out cand e gata. Vezi --profil
opțiunea, mai jos.

Bălălău are, de asemenea, un depanator integrat. O sesiune interactivă de depanare poate fi începută de
furnizarea de --depanare opțiune la linia de comandă. În acest mod de execuție, bălălău loturile
codul sursă AWK și apoi solicită comenzi de depanare. Bălălău poate doar depana AWK
sursa programului furnizată împreună cu -f opțiune. Depanatorul este documentat în BĂLĂLĂU: Eficace
AWK Programare.

OPȚIUNE FORMAT


Bălălău opțiunile pot fi fie opțiuni tradiționale cu o literă în stil POSIX, fie lungi în stil GNU
Opțiuni. Opțiunile POSIX încep cu un singur „-”, în timp ce opțiunile lungi încep cu „--”. Lung
opțiunile sunt furnizate atât pentru caracteristicile specifice GNU, cât și pentru caracteristicile impuse de POSIX.

Bălălău-opțiunile specifice sunt de obicei utilizate în formă de opțiune lungă. Argumente la opțiunile lungi
sunt fie unite cu opțiunea printr-un = semn, fără spații intermediare, sau pot fi
furnizate în următorul argument al liniei de comandă. Opțiunile lungi pot fi prescurtate, atâta timp cât
abrevierea rămâne unică.

În plus, fiecare opțiune lungă are o opțiune scurtă corespunzătoare, astfel încât opțiunea să fie
funcționalitatea poate fi utilizată din interior #! scripturi executabile.

OPŢIUNI


Bălălău acceptă următoarele opțiuni. Opțiunile standard sunt enumerate mai întâi, urmate de
opțiuni pentru bălălău extensii, enumerate alfabetic după opțiunea scurtă.

-f fişier-program
--fişier fişier-program
Citiți sursa programului AWK din fișier fişier-program, în loc de la prima
argument din linia de comandă. Multiplu -f (Sau --fişier) pot fi utilizate opțiuni.

-F fs
--separator de câmp fs
Utilizare fs pentru separatorul câmpului de intrare (valoarea lui FS variabilă predefinită).

-v a fost=val
--atribui a fost=val
Atribuiți valoarea val la variabilă a fost, înainte de a începe execuția programului.
Astfel de valori variabile sunt disponibile pentru ÎNCEPE regula unui program AWK.

-b
--caractere-ca-octeți
Tratați toate datele de intrare ca caractere pe un singur octet. Cu alte cuvinte, nu plătiți niciunul
atenție la informațiile locale atunci când încercați să procesați șiruri ca multiocteți
personaje. --posix opțiunea îl înlocuiește pe acesta.

-c
--tradiţional
A alerga în compatibilitate modul. În modul de compatibilitate, bălălău se comportă identic cu
a lui Brian Kernighan Wow; niciuna dintre extensiile specifice GNU nu este recunoscută. Vedea GNU
PRELUNGIRI, mai jos, pentru mai multe informații.

-C
--drepturi de autor
Tipăriți versiunea scurtă a mesajului de informații despre drepturile de autor GNU pe standard
ieșire și ieșire cu succes.

-d[fişier]
--variabile-dump[=fişier]
Tipăriți o listă sortată de variabile globale, tipurile și valorile finale ale acestora fişier. Dacă
Nu. fişier este furnizat, bălălău folosește un fișier numit awkvars.out în directorul curent.
A avea o listă cu toate variabilele globale este o modalitate bună de a căuta tipografice
erori în programele dvs. De asemenea, veți folosi această opțiune dacă aveți un mare
program cu o mulțime de funcții și vrei să fii sigur că funcțiile tale nu
utilizați din neatenție variabile globale pe care ați vrut să fie locale. (Acesta este un
greșeală deosebit de ușor de făcut cu nume de variabile simple, cum ar fi i, j, și așa mai departe.)

-D[fişier]
--depanare[=fişier]
Activați depanarea programelor AWK. În mod implicit, depanatorul citește comenzile
interactiv de la tastatură (input standard). Opționalul fişier argument
specifică un fișier cu o listă de comenzi pentru ca depanatorul să execute non-
interactiv.

-e program-text
--sursă program-text
Utilizare program-text ca cod sursă al programului AWK. Această opțiune permite ușor
amestecarea funcțiilor bibliotecii (utilizate prin intermediul -f și --fişier opțiuni) cu sursă
cod introdus pe linia de comandă. Este destinat în primul rând pentru AWK mediu spre mare
programe utilizate în scripturile shell.

-E fişier
--executiv fişier
similar -f, cu toate acestea, aceasta este opțiunea este ultima procesată. Asta ar trebui să fie
folosit cu #! scripturi, în special pentru aplicațiile CGI, pentru a evita trecerea
opțiuni sau cod sursă (!) pe linia de comandă dintr-o adresă URL. Această opțiune dezactivează
atribuirea variabilelor din linia de comandă.

-g
--gen-pot
Scanați și analizați programul AWK și generați un GNU .oală (Șablon de obiect portabil)
format fișier pe ieșire standard cu intrări pentru toate șirurile localizabile din
program. Programul în sine nu este executat. Vezi GNU gettext distributie pentru
mai multe informații despre .oală fișiere.

-h
--Ajutor Tipăriți un rezumat relativ scurt al opțiunilor disponibile pe rezultatul standard.
(După GNU Codificare Standarde, aceste opțiuni determină o ieșire imediată, cu succes.)

-i include-file
--include include-file
Încărcați o bibliotecă sursă awk. Aceasta caută biblioteca folosind AWKPATH
variabilă de mediu. Dacă căutarea inițială eșuează, se va face o altă încercare
după anexarea .awk sufix. Fișierul va fi încărcat o singură dată (adică,
duplicatele sunt eliminate), iar codul nu constituie programul principal
sursă.

-l lib
--sarcină lib
Încărcați o bibliotecă partajată lib. Aceasta caută biblioteca folosind AWKLIBPATH
variabilă de mediu. Dacă căutarea inițială eșuează, se va face o altă încercare
după adăugarea sufixului implicit de bibliotecă partajată pentru platformă. Librăria
rutina de inițializare este de așteptat să fie numită dl_load().

-L [valoare]
--puf[=valoare]
Furnizați avertismente despre constructele care sunt dubioase sau neportabile pentru alte AWK
implementari. Cu un argument opțional de fatal, avertismentele cu scame devin fatale
erori. Acest lucru poate fi drastic, dar utilizarea sa va încuraja cu siguranță dezvoltarea
de programe AWK mai curate. Cu un argument opțional de invalid, doar avertismente despre
sunt emise lucruri care sunt de fapt invalide. (Acest lucru nu este încă pe deplin implementat.)

-M
--bignum
Forțați aritmetica de precizie arbitrară asupra numerelor. Această opțiune nu are efect dacă bălălău
nu este compilat pentru a utiliza bibliotecile GNU MPFR și MP.

-n
--date-non-zecimale
Recunoașteți valorile octale și hexazecimale în datele de intrare. Utilizare acest opțiune cu mare
prudență!

-N
--use-lc-numeric
Acest lucru forțează bălălău pentru a utiliza caracterul punct zecimal al localizării la analizarea intrării
date. Deși standardul POSIX necesită acest comportament, și bălălău face asta când
--posix este de fapt, implicit este să urmați comportamentul tradițional și să utilizați a
punct ca punct zecimal, chiar și în locațiile în care punctul nu este zecimală
caracter punctual. Această opțiune înlocuiește comportamentul implicit, fără modul complet
stricteţea draconiană a --posix opțiune.

-o[fişier]
--destul-print[=fişier]
Ieșiți o versiune destul de tipărită a programului fişier. Daca nu fişier este furnizat,
bălălău folosește un fișier numit awkprof.out în directorul curent.

-O
--optimizeze
Activați optimizările pe reprezentarea internă a programului. În prezent,
aceasta include plierea constantă simplă și eliminarea apelului de coadă pentru recursive
funcții. bălălău întreținătorul speră să adauge optimizări suplimentare în timp.

-p[fisierul prof]
--profil[=fisierul prof]
Începeți o sesiune de profilare și trimiteți datele de profilare către fisierul prof. Implicit
is awkprof.out. Profilul conține numărul de execuții pentru fiecare instrucțiune din
programul din marginea stângă și numărul apelurilor de funcție pentru fiecare funcție definită de utilizator.

-P
--posix
Aceasta se aprinde compatibilitate mod, cu următoarele restricții suplimentare:

· \x secvențele de evacuare nu sunt recunoscute.

· Doar spațiul și tabulația acționează ca separatori de câmp atunci când FS este setat la un singur spațiu,
newline nu.

· Nu puteți continua rândurile după ? și :.

· Sinonimul FUNC pentru cuvântul cheie funcţie nu este recunoscut.

· Operatorii ** și **= nu poate fi folosit în locul ^ și ^=.

-r
--re-interval
Activați utilizarea interval expresii în potrivirea expresiilor regulate (vezi Regulat
Expresii, mai jos). Expresiile de interval nu erau disponibile în mod tradițional în
Limbaj AWK. Standardul POSIX le-a adăugat, pentru a face Wow și egrep în conformitate cu
fiecare. Sunt activate în mod implicit, dar această opțiune rămâne pentru utilizare cu
--tradiţional.

-S
--cutie cu nisip
Rulează bălălău în modul sandbox, dezactivând sistem() funcția, redirecționare de intrare cu
getline, redirecționare de ieșire cu imprima și printfși încărcarea extensiilor dinamice.
Execuția comenzii (prin conducte) este, de asemenea, dezactivată. Acest lucru blochează efectiv a
script-ul de a accesa resursele locale (cu excepția fișierelor specificate în
Linie de comanda).

-t
--lint-vechi
Furnizați avertismente despre constructele care nu sunt portabile la versiunea originală a
UNIX Wow.

-V
--versiune
Informații despre versiunea tipărită pentru această copie specială a bălălău pe ieșirea standard.
Acest lucru este util în principal pentru a ști dacă copia curentă a bălălău pe sistemul dvs. este activat
până în prezent cu privire la orice distribuie Free Software Foundation.
Acest lucru este util și atunci când raportați erori. (După GNU Codificare StandardeAcestea
opțiunile determină o ieșire imediată, cu succes.)

-- Semnalează sfârșitul opțiunilor. Acest lucru este util pentru a permite argumente suplimentare pentru AWK
programul în sine să înceapă cu un „-”. Acest lucru oferă coerență cu argumentul
convenția de analiză folosită de majoritatea celorlalte programe POSIX.

În modul de compatibilitate, orice alte opțiuni sunt marcate ca nevalide, dar sunt altfel
ignorat. În funcționare normală, atâta timp cât textul programului a fost furnizat, opțiuni necunoscute
sunt transmise programului AWK în ARGV matrice pentru procesare. Acest lucru este în special
util pentru rularea programelor AWK prin „#!” mecanism interpretor executabil.

Pentru compatibilitatea POSIX, -W poate fi utilizată opțiunea, urmată de numele unei opțiuni lungi.

AWK PROGRAMUL EXECUŢIE


Un program AWK constă dintr-o secvență de instrucțiuni tip acțiune și o funcție opțională
definiții.

@include "nume de fișier"
@sarcină "nume de fișier"
model { acțiune Declarații }
funcţie nume(parametru listă) { Declarații }

Bălălău mai întâi citește sursa programului din fişier-program(s) dacă este specificat, din argumente
la --sursă, sau de la primul argument non-opțiune de pe linia de comandă. The -f și
--sursă opțiunile pot fi utilizate de mai multe ori pe linia de comandă. Bălălău citește programul
text ca și cum toate fişier-programs și textele sursă ale liniei de comandă fuseseră concatenate
împreună. Acest lucru este util pentru a construi biblioteci de funcții AWK, fără a fi nevoie
includeți-le în fiecare nou program AWK care le utilizează. Oferă, de asemenea, capacitatea de a amesteca
funcții de bibliotecă cu programe de linie de comandă.

În plus, rândurile care încep cu @include poate fi folosit pentru a include alte fișiere sursă în
programul dvs., făcând utilizarea bibliotecii și mai ușoară. Acest lucru este echivalent cu utilizarea -i opțiune.

Rânduri care încep cu @sarcină poate fi folosit pentru a încărca biblioteci partajate în programul dumneavoastră. Acest
este echivalent cu utilizarea -l opțiune.

Variabila de mediu AWKPATH specifică o cale de căutare de utilizat atunci când găsiți fișierele sursă
numit cu -f și -i Opțiuni. Dacă această variabilă nu există, calea implicită este
„.:/usr/local/share/awk”. (Directorul real poate varia, în funcție de cum bălălău a fost
construit și instalat.) Dacă un nume de fișier dat la -f opțiunea conține un caracter „/”, nr
se efectuează căutarea căii.

Variabila de mediu AWKLIBPATH specifică o cale de căutare de utilizat atunci când găsiți sursa
fișierele denumite cu -l opțiune. Dacă această variabilă nu există, calea implicită este
„/usr/local/lib/gawk”. (Directorul real poate varia, în funcție de cum bălălău a fost construit
și instalat.)

Bălălău execută programe AWK în următoarea ordine. În primul rând, toate asignările variabile
specificat prin intermediul -v opțiunea sunt efectuate. Următorul, bălălău compilează programul într-un
formă internă. Atunci, bălălău execută codul în ÎNCEPE regulă(e) (dacă există) și apoi
continuă să citească fiecare fișier numit în ARGV matrice (până la ARGV[ARGC]). Dacă nu există
fișiere numite pe linia de comandă, bălălău citește intrarea standard.

Dacă un nume de fișier de pe linia de comandă are forma a fost=val este tratată ca o variabilă
misiune. Variabila a fost i se va atribui valoarea val. (Acest lucru se întâmplă după orice
ÎNCEPE regulile au fost executate.) Alocarea variabilelor în linia de comandă este cea mai utilă pentru
atribuirea dinamică a valorilor variabilelor pe care le utilizează AWK pentru a controla modul în care este împărțită intrarea
câmpuri și înregistrări. De asemenea, este util pentru controlul stării dacă sunt necesare mai multe treceri
peste un singur fișier de date.

Dacă valoarea unui anumit element al ARGV este gol (""), bălălău sare peste el.

Pentru fiecare fișier de intrare, dacă a BEGINFILE regula exista, bălălău execută codul asociat înainte
prelucrarea conținutului dosarului. În mod similar, bălălău execută codul asociat cu
ENDFIILE după procesarea dosarului.

Pentru fiecare înregistrare din intrare, bălălău teste pentru a vedea dacă se potrivește cu vreunul model în AWK
program. Pentru fiecare model cu care se potrivește înregistrarea, bălălău execută asociatul acțiune.
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 regulă(e) (dacă
orice).

Comandă Linie Directoare
Potrivit POSIX, fișierele numite pe Wow linia de comandă trebuie să fie fișiere text. Comportamentul
este „nedefinit” dacă nu sunt. Cele mai multe versiuni ale Wow tratați un director pe comandă
linia ca o eroare fatală.

Începând cu versiunea 4.0 a bălălău, un director pe linia de comandă produce un avertisment, dar
altfel este omis. Dacă oricare dintre --posix or --tradiţional opțiunile sunt date, atunci
bălălău revine la tratarea directoarelor de pe linia de comandă ca pe o eroare fatală.

VARIABILE, ÎNREGISTRĂRI AND CÂMPURI


Variabilele AWK sunt dinamice; ele apar atunci când sunt utilizate pentru prima dată. Al lor
valorile sunt fie numere în virgulă mobilă, fie șiruri de caractere, sau ambele, în funcție de modul în care sunt
folosit. AWK are, de asemenea, tablouri unidimensionale; matricele cu dimensiuni multiple pot fi
simulat. Bălălău oferă matrice adevărate de matrice; vedea Arrays, mai jos. Mai multe predefinite
variabilele sunt setate pe măsură ce rulează un program; acestea sunt descrise după cum este necesar și rezumate mai jos.

Înregistrări
În mod normal, înregistrările sunt separate prin caractere newline. Puteți controla modul în care sunt înregistrările
separate prin atribuirea de valori variabilei încorporate RS. Dacă RS este orice personaj,
acel caracter separă înregistrările. In caz contrar, RS este o expresie regulată. Text în
intrarea care se potrivește cu această expresie regulată separă înregistrarea. Cu toate acestea, în
modul de compatibilitate, doar primul caracter al valorii șirului său este folosit pentru separare
înregistrări. 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 un separator de câmp,
pe lângă orice valoare FS ar putea avea.

Domenii
Pe măsură ce fiecare înregistrare de intrare este citită, bălălău împarte înregistrarea în domenii, folosind valoarea lui
FS variabilă ca separator de câmp. Dacă FS este un singur caracter, câmpurile sunt separate prin
acel personaj. Dacă FS este șirul nul, apoi fiecare caracter individual devine a
câmp separat. In caz contrar, FS este de așteptat să fie o expresie regulată completă. În
caz special care FS este un singur spațiu, câmpurile sunt separate de spații și/sau file
și/sau linii noi. (Dar vezi secțiunea POSIX COMPATIBILITATE, mai jos). NOTĂ: Valoarea a
IGNORECASE (vezi mai jos) afectează și modul în care câmpurile sunt împărțite când FS este o expresie regulată,
și cum sunt separate înregistrările când RS este o expresie regulată.

În cazul în care LĂȚIMILE CÂMPULUI variabila este setată la o listă de numere separate prin spații, fiecare câmp este
de așteptat să aibă lățime fixă ​​și bălălău împarte înregistrarea folosind lățimile specificate.
Valoarea a FS este ignorat. Atribuirea unei noi valori pentru FS or FPAT trece peste utilizarea de
LĂȚIMILE CÂMPULUI.

În mod similar, dacă FPAT variabila este setată la un șir reprezentând o expresie regulată, fiecare
câmpul este format din text care se potrivește cu expresia regulată. În acest caz, obișnuit
expresia descrie câmpurile în sine, în loc de textul care separă câmpurile.
Atribuirea unei noi valori pentru FS or LĂȚIMILE CÂMPULUI trece peste utilizarea de FPAT.

Fiecare câmp din înregistrarea de intrare poate fi referit prin poziția sa: $1, $2, Și așa mai departe. $0
este întregul record. Câmpurile nu trebuie să fie referite prin constante:

n = 5
imprima $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țe 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) crește valoarea lui NF,
creează orice câmpuri intermediare cu șirul nul ca valori și determină valoarea
of $0 să fie recalculate, câmpurile fiind separate prin valoarea lui FSO. Referințe
la câmpurile numerotate negative provoacă o eroare fatală. Decrementare NF cauzează valorile de
câmpurile trecute de noua valoare care trebuie pierdută și valoarea lui $0 a fi recalculat, cu
câmpurile fiind separate prin valoarea lui FSO.

Atribuirea unei valori unui câmp existent face ca întreaga înregistrare să fie reconstruită când $0 is
referit. În mod similar, atribuirea unei valori pentru $0 face ca înregistrarea să fie răsplată, creând
noi valori pentru câmpuri.

Built-in Variabile
Bălălăuvariabilele încorporate ale lui sunt:

ARGC Numărul de argumente ale liniei de comandă (nu include opțiuni pentru bălălău, Sau
sursa programului).

ARGIND Indexul în ARGV a fișierului curent în curs de procesare.

ARGV Matrice de argumente ale liniei de comandă. Matricea este indexată de la 0 la ARGC - 1.
Schimbarea dinamică a conținutului ARGV poate controla fișierele utilizate pentru date.

BINMODE Pe sistemele non-POSIX, specifică utilizarea modului „binar” pentru toate I/O fișiere.
Valorile numerice de 1, 2 sau 3, specifică că fișierele de intrare, fișierele de ieșire sau toate
fișierele, respectiv, ar trebui să utilizeze I/O binare. Valorile șirurilor de "r", Sau "w"
specificați că fișierele de intrare sau, respectiv, fișierele de ieșire ar trebui să utilizeze binar
I/O. Valorile șirurilor de "rw" or "wr" specificați că toate fișierele ar trebui să utilizeze binar
I/O. Orice altă valoare de șir este tratată ca "rw", dar generează un avertisment
mesaj.

CONVFMT Formatul de conversie pentru numere, „%.6g”, în mod implicit.

MEDIU O matrice care conține valorile mediului curent. Matricea este
indexat de variabilele de mediu, fiecare element fiind valoarea acestuia
variabilă (de exemplu, MEDIU[„ACASĂ”] ar putea fi „/acasă/arnold”). Schimbarea acestei matrice
nu afectează mediul văzut de programele care bălălău generează via
redirecționarea sau sistem() Funcția.

ERRNO Dacă apare o eroare de sistem, fie efectuând o redirecționare pentru getline, în timpul unei citiri
pentru getline, sau în timpul unei închide(), Apoi ERRNO va conține un șir care descrie
eroarea. Valoarea este supusă traducerii în localități non-engleze.

LĂȚIMILE CÂMPULUI O listă separată de spații albe cu lățimi de câmp. Când este setat, bălălău analizează intrarea
în câmpuri de lățime fixă, în loc să folosiți valoarea lui FS variabil ca
separatorul de câmp. Vedea Domenii, de mai sus.

NUME DE FIȘIER Numele fișierului de intrare curent. Dacă nu sunt specificate fișiere în comandă
linie, valoarea lui NUME DE FIȘIER este "-". In orice caz, NUME DE FIȘIER este nedefinită în interiorul
ÎNCEPE regula (dacă nu este stabilită de getline).

FNR Numărul de înregistrare introdus în fișierul de intrare curent.

FPAT O expresie regulată care descrie conținutul câmpurilor dintr-o înregistrare. Când
a stabilit, bălălău parsează intrarea în câmpuri, unde câmpurile se potrivesc cu cele obișnuite
expresie, în loc de a folosi valoarea lui FS variabilă ca câmp
separator. Vedea Domenii, de mai sus.

FS Separatorul câmpului de intrare, un spațiu implicit. Vedea Domenii, de mai sus.

FUNCTAB Un tablou ai cărui indici și valori corespunzătoare sunt numele tuturor utilizatorilor-
funcții definite sau de extensie în program. NOTĂ: Nu puteți folosi
șterge declarație cu FUNCTAB matrice.

IGNORECASE Controlează diferența dintre majuscule și minuscule pentru toate expresiile regulate și operațiile cu șir.
If IGNORECASE are o valoare diferită de zero, apoi comparații de șiruri și model
potrivirea în reguli, împărțirea câmpului cu FS și FPAT, înregistrarea separării cu
RS, expresia regulată care se potrivește cu ~ și !~, Şi gensub(), gsub(),
index(), Meci(), patsplit(), Despică(), și sub() toate funcțiile încorporate ignoră
caz când se efectuează operații cu expresii regulate. NOTĂ: Subscrierea matricei este
nu afectat. Însă asort() și asorti() funcțiile sunt afectate.
Astfel, dacă IGNORECASE nu este egal cu zero, /aB/ se potrivește cu toate șirurile
"ab", "aB", "Ab", și "AB". Ca și în cazul tuturor variabilelor AWK, valoarea inițială a
IGNORECASE este zero, deci toate expresiile regulate și operațiile cu șiruri sunt
în mod normal, distinge între majuscule și minuscule.

PUF Oferă control dinamic al --puf opțiune din cadrul unui program AWK.
Când este adevărat, bălălău imprimă avertismente cu scame. Când este fals, nu. Când este atribuit
valoarea șirului "fatal", avertismentele de scame devin erori fatale, exact ca
--lint=fatal. Orice altă valoare adevărată imprimă doar 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.

FSO Separatorul câmpului de ieșire, un spațiu implicit.

SRO Separatorul înregistrărilor de ieșire, implicit o linie nouă.

PREV Precizia de lucru a numerelor în virgulă mobilă cu precizie arbitrară, 53 de
Mod implicit.

PROCINFO Elementele acestei matrice oferă acces la informații despre AWK care rulează
program. Pe unele sisteme, pot exista elemente în matrice, "Grupa 1"
prin "grupn" pentru unii n, care este numărul de grupuri suplimentare care
procesul are. Folosește in operator pentru a testa aceste elemente. The
Următoarele elemente sunt garantate a fi disponibile:

PROCINFO["egid"] Valoarea lui getegid(2) apel de sistem.

PROCINFO["strftime"]
Șirul de format de oră implicit pentru strftime().

PROCINFO["euid"] Valoarea lui geteuid(2) apel de sistem.

PROCINFO["FS"] "FS" dacă câmpul se împarte cu FS este în vigoare, "FPAT" if
împărțirea câmpului cu FPAT este în vigoare sau „LĂȚIMILE CAMPULUI”
dacă câmpul se împarte cu LĂȚIMILE CÂMPULUI este în vigoare.

PROCINFO[„identificatori”]
Un subbary, indexat după numele tuturor identificatorilor utilizați
în textul programului AWK. Valorile indică ce
bălălău știe despre identificatori după ce a terminat
analiza programului; sunt nu actualizat în timp ce
programul rulează. Pentru fiecare identificator, valoarea lui
elementul este unul dintre următoarele:

"matrice"
Identificatorul este o matrice.

"incorporat"
Identificatorul este o funcție încorporată.

"extensie"
Identificatorul este o funcție de extensie încărcată prin
@sarcină or -l.

"scalar"
Identificatorul este scalar.

"netipizat"
Identificatorul este netipificat (ar putea fi folosit ca a
scalar sau matrice, bălălău nu stie inca).

"utilizator" Identificatorul este o funcție definită de utilizator.

PROCINFO["gid"] Valoarea lui getgid(2) apel de sistem.

PROCINFO["pgrpid"] ID-ul grupului de procese al procesului curent.

PROCINFO["pid"] ID-ul procesului curent.

PROCINFO["ppid"] ID-ul procesului părinte al procesului curent.

PROCINFO[„uid”] Valoarea lui getuid(2) apel de sistem.

PROCINFO["sorted_in"]
Dacă acest element există în PROCINFO, apoi valoarea sa
controlează ordinea în care sunt parcurse elementele matricei
in pentru bucle. Valorile suportate sunt „@ind_str_asc”,
„@ind_num_asc”, „@val_type_asc”, „@val_str_asc”,
„@val_num_asc”, „@ind_str_desc”, „@ind_num_desc”,
„@val_type_desc”, „@val_str_desc”, „@val_num_desc”, și
„@nesortat”. Valoarea poate fi, de asemenea, numele oricărui
funcție de comparație definită după cum urmează:

funcţie cmp_func(i1, v1, i2 v2)

Unde i1 și i2 sunt indicii, și v1 și v2 sunt
valorile corespunzătoare ale celor două elemente care se compară.
Ar trebui să returneze un număr mai mic, egal sau mai mare
decât 0, în funcție de modul în care sunt elementele matricei
fi comandat.

PROCINFO["input", „READ_TIMEOUT”]
Timpul de expirare în milisecunde pentru citirea datelor din intrare,
Unde intrare este un șir de redirecționare sau un nume de fișier. O valoare
de zero sau mai puțin de zero înseamnă că nu există timeout.

PROCINFO["mpfr_version"]
Versiunea bibliotecii GNU MPFR folosită pentru arbitrare
suport numeric de precizie în bălălău. Această intrare nu este
prezent dacă suportul MPFR nu este compilat în bălălău.

PROCINFO["gmp_version"]
Versiunea bibliotecii GNU MP folosită pentru arbitrare
suport numeric de precizie în bălălău. Această intrare nu este
prezent dacă suportul MPFR nu este compilat în bălălău.

PROCINFO["prec_max"]
Precizia maximă susținută de biblioteca GNU MPFR
pentru numere cu virgulă mobilă de precizie arbitrară. Acest
intrarea nu este prezentă dacă suportul MPFR nu este compilat în
bălălău.

PROCINFO["prec_min"]
Precizia minimă permisă de biblioteca GNU MPFR pt
numere în virgulă mobilă cu precizie arbitrară. Această intrare este
nu este prezent dacă suportul MPFR nu este compilat în bălălău.

PROCINFO["api_major"]
Versiunea principală a extensiei API. Această intrare nu este
prezent dacă încărcarea extensiilor dinamice nu este disponibilă.

PROCINFO["api_minor"]
Versiunea minoră a extensiei API. Această intrare nu este
prezent dacă încărcarea extensiilor dinamice nu este disponibilă.

PROCINFO[„versiunea”] versiunea de bălălău.

MOD ROUND Modul de rotunjire de utilizat pentru aritmetica de precizie arbitrară pe numere, prin
lipsă „N” (Modul IEEE-754 roundTiesToEven). Valorile acceptate sunt „N” or
„n” pentru roundTiesToEven, "SAU" or "u" pentru roundTowardPositive, "D" or "d" pentru
rotundSpre negativ, „Z” or „z” pentru roundTowardZero și dacă versiunea dvs. de
Biblioteca GNU MPFR îl acceptă, "A" or "A" pentru roundTiesToAway.

RS Separatorul de înregistrare de intrare, implicit o nouă linie.

RT Terminator de înregistrare. Bălălău seturi RT la textul de intrare care se potrivea cu
caracter sau expresie regulată specificată de RS.

RSTART Indexul primului caracter potrivit de Meci(); 0 dacă nu se potrivește. (Acest
implică faptul că indicii caracterelor încep de la unu.)

LUNGIME Lungimea șirului potrivită de Meci(); -1 dacă nu se potrivește.

SUBEP Caracterul folosit pentru a separa mai multe indice în elemente de matrice, prin
lipsă „\034”.

SYMTAB O matrice ai cărei indici sunt numele tuturor variabilelor globale definite în prezent
și matrice în program. Matricea poate fi folosită pentru acces indirect la citire
sau scrieți valoarea unei variabile:

foo = 5
SYMTAB[„foo”] = 4
imprima foo # printuri 4

isarray() funcția poate fi utilizată pentru a testa dacă un element în SYMTAB este o
matrice. Nu puteți folosi șterge declarație cu SYMTAB matrice.

DOMENIUL TEXT Domeniul text al programului AWK; folosit pentru a găsi traducerile localizate
pentru șirurile programului.

Arrays
Matricele sunt subscriptoare cu o expresie între paranteze drepte ([ și ]). Dacă
expresia este o listă de expresii (expres, expres ...) atunci indicele matricei este un șir
constând în concatenarea valorii (șirului) a fiecărei expresii, despărțite prin
valoarea SUBEP variabil. Această facilitate este utilizată pentru a simula dimensionarea multiplă
matrice. De exemplu:

i = "A"; j = „B”; k = "C"
x[i, j, k] = "Buna ziua, lume\n"

atribuie șirul "Buna ziua, lume\n" la elementul matricei x care este indexat de către
şir „A\034B\034C”. Toate tablourile din AWK sunt asociative, adică indexate după valorile șirului.

Operatorul special in poate fi folosit pentru a testa dacă o matrice are un index format din a
valoare particulara:

if (val in matrice)
imprima matrice[val]

Dacă matricea are mai multe indice, utilizați (și, j) in mulțime.

in constructul poate fi folosit și într-un pentru buclă pentru a repeta peste toate elementele unui
matrice. Însă (și, j) in mulțime construcția funcționează numai în teste, nu în pentru bucle.

Un element poate fi șters dintr-o matrice folosind șterge afirmație. The șterge declaraţie
poate fi folosit și pentru a șterge întregul conținut al unei matrice, doar prin specificarea matricei
nume fără indice.

bălălău acceptă adevărate matrice multidimensionale. Nu necesită ca astfel de matrice să fie
„dreptunghiular” ca în C sau C++. De exemplu:

a[1] = 5
a[2][1] = 6
a[2][2] = 7

NOTĂ: Poate că trebuie să-i spui bălălău că un element de matrice este într-adevăr un subbary pentru a fi utilizat
ea unde bălălău așteaptă o matrice (cum ar fi în al doilea argument la Despică()). Poti sa faci
aceasta prin crearea unui element în subbary și apoi ștergerea acestuia cu șterge
afirmație.

Variabil Dactilografiere Și Convertire
Variabilele și câmpurile pot fi numere (virgulă mobilă) sau șiruri de caractere sau ambele. Cum valoarea
a unei variabile este interpretată depinde de contextul acesteia. Dacă este utilizat într-o expresie numerică,
va fi tratat ca un număr; dacă este folosit ca șir, va fi tratat ca șir.

Pentru a forța o variabilă să fie tratată ca număr, adăugați 0 la ea; pentru a-l forța să fie tratat ca a
șir, concatenează-l cu șirul nul.

Variabilele neinițializate au valoarea numerică 0 și valoarea șirului „” (null sau
Șir gol).

Când un șir trebuie convertit într-un număr, conversia se realizează folosind
strtod(3). Un număr este convertit într-un șir utilizând valoarea lui CONVFMT ca format
sfoară pentru sprint(3), cu valoarea numerică a variabilei drept argument. In orice caz,
chiar dacă toate numerele din AWK sunt în virgulă mobilă, valorile integrale sunt mereu convertit ca
numere întregi. Astfel, dat

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

variabila b are o valoare șir de "12" si nu "12.00".

NOTĂ: Când operați în modul POSIX (cum ar fi cu --posix opțiune), ai grijă de acel local
setările pot interfera cu modul în care sunt tratate numerele zecimale: separatorul zecimal al
numerele la care hrăniți bălălău trebuie să se conformeze la ceea ce s-ar aștepta localitatea dvs., fie că este vorba despre a
virgulă (,) sau punct (.).

Bălălău efectuează comparații după cum urmează: Dacă două variabile sunt numerice, acestea sunt comparate
numeric. Dacă o valoare este numerică, iar cealaltă are o valoare șir care este „numeric
șir”, apoi comparațiile se fac și numeric. În caz contrar, valoarea numerică este
convertit într-un șir și se efectuează o comparație de șir. Se compară două șiruri, de
desigur, ca șiruri.

Rețineți că constantele șir, cum ar fi "57", sunt nu șiruri numerice, sunt șiruri
constante. Ideea de „șir numeric” se aplică numai câmpurilor, getline intrare, NUME DE FIȘIER,
ARGV elemente, MEDIU elementele și elementele unui tablou creat de Despică() or
patsplit() care sunt șiruri numerice. Ideea de bază este că utilizator intrare, și numai utilizator
intrarea, care pare numerică, ar trebui tratată în acest fel.

octal și Hexazecimal constante
Puteți utiliza constante octale și hexazecimale în stil C în codul sursă al programului AWK. Pentru
de exemplu, valoarea octală 011 este egal cu zecimală 9, și valoarea hexazecimală 0x11 is
egal cu zecimala 17.

Şir constante
Constantele șirurilor din AWK sunt secvențe de caractere cuprinse între ghilimele duble (cum ar fi
„Valoarea“). În șiruri, sigur scăpa Secvențele sunt recunoscute, ca în C. Acestea sunt:

\\ O bară oblică inversă.

\a Caracterul „alerta”; de obicei caracterul ASCII BEL.

\b Backspace.

\f Form-feed.

\n Linie nouă.

\r Retur transport.

\t Filă orizontală.

\v Filă verticală.

\xhex cifre
Caracterul reprezentat de șirul de cifre hexazecimale care urmează \x.
în ISO C, toate cifrele hexazecimale următoare sunt considerate parte a evadării
secvenţă. (Această caracteristică ar trebui să ne spună ceva despre proiectarea limbajului de către
comitet.) De exemplu, „\x1B” este caracterul ASCII ESC (escape).

\DDD Caracterul reprezentat de secvența de 1, 2 sau 3 cifre de cifre octale. De exemplu,
„\033” este caracterul ASCII ESC (escape).

\c Personajul literal c.

Secvențele de evacuare pot fi, de asemenea, utilizate în interiorul expresiilor regulate constante (de exemplu,
/[ \t\f\n\r\v]/ se potrivește cu caractere cu spații albe).

În modul de compatibilitate, caracterele reprezentate prin octal și hexazecimal scapă
secvențele sunt tratate literal atunci când sunt utilizate în constantele expresiei regulate. Prin urmare, /a\52b/
este echivalent cu /a\*b/.

MODELELOR AND ACȚIUNI


AWK este un limbaj orientat pe linii. Modelul vine mai întâi și apoi acțiunea. Acțiune
declarațiile sunt incluse în { și }. Fie modelul poate lipsi, fie acțiunea
lipsesc, dar, desigur, nu ambele. Dacă modelul lipsește, acțiunea este executată
pentru fiecare înregistrare de intrare. O acțiune lipsă este echivalentă cu

{ imprima }

care tipărește întreaga înregistrare.

Comentariile încep cu # caracter și continuați până la sfârșitul rândului. Linii goale
poate fi folosit pentru a separa declarațiile. În mod normal, o declarație se termină cu o nouă linie, totuși,
acesta nu este cazul liniilor care se termină în virgulă, {, ?, :, &&, Sau ||. Rândurile care se termină în do
or altfel de asemenea, declarațiile lor continuă automat pe rândul următor. În
în alte cazuri, o linie poate fi continuată terminând-o cu „\”, caz în care linia nouă este
ignorat.

Mai multe instrucțiuni pot fi plasate pe o singură linie, separându-le cu un „;”. Acest lucru se aplică
atât instrucțiunile din partea de acțiune a unei perechi model-acțiune (cazul obișnuit), cât și
la enunţurile model-acţiune în sine.

Modele
Modelele AWK pot fi unul dintre următoarele:

ÎNCEPE
Sfârşit
BEGINFILE
ENDFIILE
/regulat expresie/
relațional expresie
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 în raport cu intrarea.
Părțile de acțiune ale tuturor ÎNCEPE tiparele sunt îmbinate ca și cum toate afirmațiile ar fi fost
scris într-o singură ÎNCEPE regulă. Ele sunt executate înainte ca oricare dintre intrări să fie citită.
În mod similar, toate Sfârşit regulile sunt îmbinate și executate când toate intrările sunt epuizate (sau
când un ieşire instrucțiunea este executată). ÎNCEPE și Sfârşit modelele nu pot fi combinate cu altele
tipare în expresii tipar. ÎNCEPE și Sfârşit modelele nu pot avea părți de acțiune lipsă.

BEGINFILE și ENDFIILE sunt modele speciale suplimentare ale căror corpuri sunt executate înainte
citirea primei înregistrări a fiecărui fișier de intrare în linia de comandă și după citirea ultimei înregistrări
din fiecare dosar. În interiorul BEGINFILE regula, valoarea de ERRNO va fi șirul gol dacă
fisierul a fost deschis cu succes. În caz contrar, există o problemă cu fișierul și
codul ar trebui să fie folosit următorul fișier să sară peste el. Dacă asta nu se face, bălălău produce fatalul său obișnuit
eroare pentru fișierele care nu pot fi deschise.

Pentru /regulat expresie/ modele, instrucțiunea asociată este executată pentru fiecare intrare
înregistrare care se potrivește cu expresia regulată. Expresiile regulate sunt aceleași cu cele din
egrep(1) și sunt rezumate mai jos.

A relațional expresie poate utiliza oricare dintre operatorii definiți mai jos în secțiunea privind
actiuni. Acestea testează în general dacă anumite câmpuri se potrivesc cu anumite expresii regulate.

&&, ||, și ! operatorii sunt AND logici, SAU logic și, respectiv, NOT logic,
ca în C. Ei fac evaluarea scurtcircuitelor, la fel ca în C, și sunt folosiți pentru combinarea mai multor
expresii de tipar primitiv. Ca în majoritatea limbilor, parantezele pot fi folosite pentru a schimba
ordinea evaluării.

?: operatorul este ca același operator în C. Dacă primul model este adevărat, atunci
modelul folosit pentru testare este al doilea model, altfel este al treilea. Doar unul dintre
se evaluează al doilea și al treilea model.

pattern1, pattern2 forma unei expresii se numește a gamă model. Se potrivește cu toate
introduceți înregistrări începând cu o înregistrare care se potrivește pattern1, și continuă până la o înregistrare
care se potrivește pattern2, inclusiv. Nu se combină cu niciun alt tip de model
expresie.

Regulat Expresii
Expresiile regulate sunt tipul extins găsit în egrep. Sunt compuse din personaje
după cum urmează:

c Se potrivește cu non-metacaracterul c.

\c Se potrivește cu caracterul literal c.

. Se potrivește cu orice caracter inclusiv linie nouă.

^ Se potrivește cu începutul unui șir.

$ Se potrivește cu capătul unui șir.

[abc...] O listă de caractere: se potrivește cu oricare dintre personaje abc.... Puteți include un
serie de caractere, separându-le cu o liniuță.

[^abc...] O listă de caractere negate: se potrivește cu orice caracter, cu excepția abc....

r1|r2 Alternanță: se potrivește fie r1 or r2.

r1r2 Concatenare: potriviri r1, Și apoi r2.

r+ Se potrivește cu una sau mai multe r's.

r* Se potrivește cu zero sau mai multe r's.

r? Se potrivește cu zero sau unu r's.

(r) Grupare: meciuri r.

r{n}
r{n,}
r{n,m} Unul sau două numere din acolade indică an interval expresie. Daca exista
un număr între acolade, expresia regulată anterioară r se repetă n
ori. Dacă sunt două numere separate prin virgulă, r se repetă n la m
ori. Dacă există un număr urmat de o virgulă, atunci r se repeta cel putin
n ori.

\y Se potrivește cu șirul gol la începutul sau la sfârșitul unui cuvânt.

\B Potrivește șirul gol dintr-un cuvânt.

\< Se potrivește cu șirul gol de la începutul unui cuvânt.

\> Se potrivește cu șirul gol de la sfârșitul unui cuvânt.

\s Se potrivește cu orice caracter de spațiu alb.

\S Se potrivește cu orice caracter fără spații albe.

\w Se potrivește cu orice caracter constitutiv al cuvântului (litera, cifră sau caracterul de subliniere).

\W Se potrivește cu orice caracter care nu este alcătuit din cuvânt.

\` Se potrivește cu șirul gol de la începutul unui buffer (șir).

\' Se potrivește cu șirul gol de la sfârșitul unui buffer.

Secvențele de escape care sunt valide în constantele șir (vezi Şir constante) sunt deasemenea
valabil în expresiile regulate.

Caracter clase sunt o caracteristică introdusă în standardul POSIX. O clasă de caractere este a
notație specială pentru descrierea listelor de caractere care au un anumit atribut, dar
unde personajele reale în sine pot varia de la țară la țară și/sau de la
set de caractere la set de caractere. De exemplu, noțiunea de ce este un alfabet
caracterul diferă în SUA și în Franța.

O clasă de caractere este validă doar într-o expresie regulată în interiorul parantezele unui personaj
listă. Clasele de caractere constau din [:, un cuvânt cheie care denotă clasa și :].
clasele de caractere definite de standardul POSIX sunt:

[:alnum:] Caractere alfanumerice.

[:alfa:] Caractere alfabetice.

[:gol:] Caractere cu spațiu sau tabulator.

[:cntrl:] Personaje de control.

[:cifră:] Caractere numerice.

[:grafic:] Caractere care sunt atât imprimabile, cât și vizibile. (Un spațiu este imprimabil, dar nu
vizibil, în timp ce an a este ambele.)

[:inferior:] Caractere alfabetice mici.

[:imprimare:] Caractere imprimabile (caractere care nu sunt caractere de control.)

[:punct:] Caractere de punctuație (caracterele care nu sunt litere, cifre, control
caractere sau caractere de spațiu).

[:spaţiu:] Caractere de spațiu (cum ar fi spațiu, tab și formfeed, pentru a numi câteva).

[:superior:] Caractere alfabetice majuscule.

[:xdigit:] Caractere care sunt cifre hexazecimale.

De exemplu, înainte de standardul POSIX, pentru a se potrivi cu caractere alfanumerice, ați avea
trebuia să scrie /[A-Za-z0-9]/. Dacă setul de caractere conține alte caractere alfabetice,
acest lucru nu s-ar potrivi cu ele, iar dacă setul tău de caractere ar fi comparat diferit de ASCII, asta
s-ar putea să nu se potrivească nici măcar cu caracterele alfanumerice ASCII. Cu clasele de caractere POSIX,
poti sa scrii /[[:alnum:]]/, iar aceasta se potrivește cu caracterele alfabetice și numerice din
setul tău de caractere, indiferent care este acesta.

În listele de caractere pot apărea două secvențe speciale suplimentare. Acestea se aplică pentru non-ASCII
seturi de caractere, care pot avea simboluri unice (numite colaţionarea element) care sunt
reprezentat cu mai mult de un caracter, precum și cu mai multe personaje care sunt
echivalent pentru colaţionarea, sau de sortare, scopuri. (De exemplu, în franceză, un „e” simplu și a
„`” cu accent grav este echivalent.)

Colectarea simbolurilor
Un simbol de colaţionare este un element de colaţionare cu mai multe caractere inclus în [. și .].
De exemplu, dacă ch este un element de comparare, atunci [[.ch.]] este o expresie regulată
care se potrivește cu acest element de comparare, în timp ce [ch] este o expresie regulată care
meciuri fie c or h.

Clasele de echivalență
O clasă de echivalență este un nume specific local pentru o listă de caractere care sunt
echivalent. Numele este inclus în [= și =]. De exemplu, numele e ar putea fi
folosit pentru a reprezenta toate „e”, „´” și „`.” În acest caz, [[=e=]] este un obișnuit
expresie care se potrivește cu oricare dintre e, , Sau e`.

Aceste caracteristici sunt foarte valoroase în localitățile care nu vorbesc engleza. Funcționează biblioteca
acea bălălău utilizările pentru potrivirea expresiilor regulate recunosc în prezent doar caracterul POSIX
clase; ei nu recunosc simboluri de colaţionare sau clase de echivalenţă.

\y, \B, \<, \>, \s, \S, \w, \W, \`, și \' operatorii sunt specifici bălălău; sunt
extensii bazate pe facilitățile din bibliotecile de expresii regulate GNU.

Diferitele opțiuni ale liniei de comandă controlează cum bălălău interpretează caracterele în mod obișnuit
expresii.

Fără opțiuni
În cazul implicit, bălălău oferă toate facilitățile expresiilor regulate POSIX
și operatorii de expresie regulată GNU descriși mai sus.

--posix
Sunt acceptate doar expresiile regulate POSIX, operatorii GNU nu sunt speciali.
(De exemplu, \w se potrivește cu un literal w).

--tradiţional
UNIX tradițional Wow expresiile regulate sunt potrivite. Operatorii GNU nu sunt
expresii speciale și interval nu sunt disponibile. Caractere descrise prin octal
iar secvențele de evadare hexazecimale sunt tratate literal, chiar dacă reprezintă
metacaracterele expresiei regulate.

--re-interval
Permiteți expresii de interval în expresii regulate, chiar dacă --tradiţional a fost
cu condiția.

Acţiuni
Declarațiile de acțiune sunt incluse între acolade, { și }. Declarațiile de acțiune constau în cele obișnuite
declarații de atribuire, condiționale și bucle găsite în majoritatea limbilor. Operatorii,
instrucțiunile de control și instrucțiunile de intrare/ieșire disponibile sunt modelate după cele din C.

Operatorii
Operatorii din AWK, în ordinea descrescătoare a priorității, sunt:

(...) Gruparea

$ Referință de câmp.

++ -- Crește și decrementează, atât prefix, cât și postfix.

^ Exponentiație (** poate fi folosit și **= pentru operatorul de atribuire).

+ - ! Plus unar, minus unar și negație logică.

* / % Înmulțirea, împărțirea și modulul.

+ - Adunare si scadere.

spaţiu Concatenarea șirurilor.

| |& I/O canalizat pentru getline, imprima, și printf.

< > <= >= != ==
Operatorii relaționali obișnuiți.

~ !~ Potrivire expresie regulată, potrivire negata. NOTĂ: Nu utilizați o constantă obișnuită
expresie (/foo/) în partea stângă a a ~ or !~. Folosiți doar unul pe
partea dreaptă. Expresia /foo/ ~ exp are acelasi sens ca ((0 USD ~
/foo/) ~ exp). Aceasta este de obicei nu Ce vrei.

in Calitatea de membru al matricei.

&& ȘI logic.

|| SAU logic.

?: Expresia condițională C. Aceasta are forma expr1 ? expr2 : expr3. Dacă
expr1 este adevărat, valoarea expresiei este expr2, altfel este expr3.
Doar unul dintre expr2 și expr3 este evaluat.

= += -= *= /= %= ^=
Misiune. Ambele atribuții absolute (a fost = valoare) și desemnarea operatorului
(celelalte forme) sunt suportate.

Mod de control Declaratii
Declarațiile de control sunt următoarele:

if (condiție) declaraţie [ altfel declaraţie ]
în timp ce (condiție) declaraţie
do declaraţie în timp ce (condiție)
pentru (expr1; expr2; expr3) declaraţie
pentru (a fost in mulțime) declaraţie
rupe
continua
șterge mulțime[index]
șterge mulțime
ieşire [ expresie ]
{ Declarații }
comuta (expresie) {
caz valoare|regex : declaraţie
...
[ implicit: declaraţie ]
}

I / O Declaratii
Instrucțiunile de intrare/ieșire sunt după cum urmează:

închide(fişier [, cum]) Închideți fișierul, conducta sau co-procesează. Opționalul cum ar trebui să fie doar
utilizat la închiderea unui capăt al unei conducte cu două sensuri la un co-proces. Aceasta
trebuie să fie o valoare șir, fie "la" or "din".

getline set $0 din următoarea înregistrare de intrare; a stabilit NF, NR, FNR, RT.

getline <fişier set $0 din următorul record al fişier; a stabilit NF, RT.

getline a fost set a fost din următoarea înregistrare de intrare; a stabilit NR, FNR, RT.

getline a fost <fişier set a fost din următorul record al fişier, RT.

comandă | getline [a fost]
Alerga comandă conductând ieșirea fie în $0 or a fost, ca mai sus, și
RT.

comandă |& getline [a fost]
Alerga comandă ca un co-proces de conducte de ieșire fie în $0 or a fost,
ca mai sus și RT. Co-procesele sunt a bălălău extensie. (comandă poate să
fi de asemenea o priză. Vezi subsecțiunea Special Fișier Alte denumiri, mai jos.)

următor Opriți procesarea înregistrării curente de intrare. Următoarea înregistrare de intrare este
citirea și procesarea începe de la capăt cu primul model din AWK
program. La atingerea sfârșitului datelor de intrare, bălălău execută orice
Sfârşit regulă(e).

următorul fișier Opriți procesarea fișierului de intrare curent. Următoarea înregistrare de intrare este citită
provine din următorul fișier de intrare. NUME DE FIȘIER și ARGIND sunt actualizate,
FNR este resetat la 1, iar procesarea începe de la capăt cu primul model
în programul AWK. La atingerea sfârșitului datelor de intrare, bălălău
execută orice Sfârşit regulă(e).

imprima Tipăriți înregistrarea curentă. Înregistrarea de ieșire se încheie cu
Valoarea SRO.

imprima expr-list Imprimați expresii. Fiecare expresie este separată de valoarea lui
FSO. Înregistrarea de ieșire se încheie cu valoarea de SRO.

imprima expr-list >fişier Imprimați expresiile pe fişier. Fiecare expresie este separată de
Valoarea FSO. Înregistrarea de ieșire se încheie cu valoarea de
SRO.

printf fmt, expr-list Formatați și imprimați. Vedea printf Declarație, De mai jos.

printf fmt, expr-list >fişier
Formatați și imprimați fişier.

sistem(cmd-line) Executați comanda cmd-lineși returnați starea de ieșire. (Acest lucru poate
nu va fi disponibil pe sisteme non-POSIX.)

fflush([fişier]) Goliți orice buffer-uri asociate fișierului sau conductei de ieșire deschise fişier.
If fişier lipsește sau dacă este șirul nul, atunci ștergeți totul deschis
fișiere de ieșire și conducte.

Sunt permise redirecționări suplimentare de ieșire imprima și printf.

imprima ... >> fişier
Adaugă ieșirea la fişier.

imprima ... | comandă
Scrie pe o țeavă.

imprima ... |& comandă
Trimite date la un co-proces sau socket. (Vezi și subsecțiunea Special Fișier Alte denumiri,
de mai jos.)

getline comanda returnează 1 la succes, 0 la sfârșitul fișierului și -1 la o eroare. La o
eroare, ERRNO este setat la un șir care descrie problema.

NOTĂ: Eșecul în deschiderea unei prize cu două căi are ca rezultat revenirea unei erori nefatale
funcția de apelare. Dacă utilizați o țeavă, co-procesează sau priză la getline, Sau de la imprima or
printf într-o buclă, tu trebuie sa utilizare închide() pentru a crea instanțe noi ale comenzii sau
priză. AWK nu închide automat conductele, prizele sau co-procesele atunci când revin
EOF.

printf Declarație
Versiunile AWK ale printf declarație și sprintf() funcția (vezi mai jos) acceptă
următoarele formate de specificații de conversie:

%c Un singur personaj. Dacă argumentul folosit pentru %c este numeric, este tratat ca a
caracter și imprimat. În caz contrar, se presupune că argumentul este un șir de caractere și
numai primul caracter al acelui șir este imprimat.

%d, %i Un număr zecimal (partea întreagă).

%e, %E Un număr în virgulă mobilă de forma [-]d.dddddde[+-]dd. %E utilizări de format E
în loc de e.

%f, %F Un număr în virgulă mobilă de forma [-]DDD.dddddd. Dacă biblioteca de sistem acceptă
aceasta, %F este disponibil de asemenea. Acesta este ca %f, dar folosește majuscule pentru special
valorile „nu este un număr” și „infinit”. Dacă %F nu este disponibilă, bălălău utilizări %f.

%g, %G Utilizare %e or %f conversie, oricare dintre acestea este mai scurtă, cu zerouri nesemnificative
suprimat. The %G utilizări de format %E în loc de %e.

%o Un număr octal fără semn (de asemenea, un număr întreg).

%u Un număr zecimal fără semn (din nou, un număr întreg).

%s Un șir de caractere.

%x, %X Un număr hexazecimal fără semn (un număr întreg). The %X utilizări de format ABCDEF în loc de
abcdef.

%% Un singur % caracter; niciun argument nu este convertit.

Opțional, parametri suplimentari se pot afla între % si scrisoarea de control:

conta$ Folosește contaal-lea argument în acest moment al formatării. Aceasta se numește a
pozitional specificator și este destinat în principal utilizării în versiunile traduse ale
șiruri de format, nu în textul original al unui program AWK. Este un bălălău
extensie.

- Expresia ar trebui să fie justificată la stânga în câmpul său.

spaţiu Pentru conversiile numerice, prefixați valorile pozitive cu un spațiu și valorile negative
cu un semn minus.

+ Semnul plus, folosit înaintea modificatorului de lățime (vezi mai jos), spune să furnizezi întotdeauna a
semn pentru conversii numerice, chiar dacă datele de formatat sunt pozitive. The +
suprascrie modificatorul de spațiu.

# Utilizați o „formă alternativă” pentru anumite scrisori de control. Pentru %o, furniza un lider
zero. Pentru %x, și %X, furniza un lider 0x or 0X pentru un rezultat diferit de zero. Pentru %e, %E,
%f și %F, rezultatul conține întotdeauna un punct zecimal. Pentru %g, și %G, în urmă
zerourile nu sunt eliminate din rezultat.

0 Un lider 0 (zero) acționează ca un steag, care indică ieșirea cu care ar trebui să fie completată
zerouri în loc de spații. Acest lucru se aplică numai formatelor numerice de ieșire. Acest
flag are efect numai atunci când lățimea câmpului este mai mare decât valoarea care trebuie tipărită.

' Un singur caracter ghilimele indică bălălău pentru a introduce separatorul de mii al localului
caracter în numere zecimale și pentru a utiliza, de asemenea, punctul zecimal al localului
caracter cu formate în virgulă mobilă. Acest lucru necesită suport local corect în
C bibliotecă și în definiția localului curent.

lățime Câmpul ar trebui să fie completat la această lățime. Câmpul este în mod normal umplut cu
spatii. Cu 0 steag, este umplut cu zerouri.

.prev Un număr care specifică precizia de utilizat la imprimare. Pentru %e, %E, %f și
%F, aceasta specifică numărul de cifre pe care doriți să le imprimați în dreapta
punctul zecimal. Pentru %g, și %G formate, specifică numărul maxim de
cifre semnificative. Pentru %d, %i, %o, %u, %x, și %X formatele, specifică
numărul minim de cifre de imprimat. Pentru %s, precizează numărul maxim de
caractere din șirul care trebuie tipărit.

Dinamica lățime și prev capabilitățile ISO C printf() rutinele sunt suportate. A *
în locul fie al lățime or prev caietul de sarcini face ca valorile acestora să fie luate din
lista de argumente la printf or sprintf(). Pentru a utiliza un specificator de poziție cu o dinamică
lățime sau precizie, furnizați conta$ după * în șirul de format. De exemplu,
„%3$*2$.*1$s”.

Special Fișier Alte denumiri
Când faceți redirecționare I/O de la oricare imprima or printf într-un fișier sau prin getline de la un
fişier, bălălău recunoaște în interior anumite nume de fișiere speciale. Aceste nume de fișiere permit accesul
pentru a deschide descriptori de fișiere moștenite de la bălălăuprocesul părinte al lui (de obicei shell-ul). Aceste
numele de fișiere pot fi folosite și pe linia de comandă pentru a denumi fișierele de date. Numele fișierelor sunt:

- Intrarea standard.

/dev/stdin Intrarea standard.

/dev/stdout Ieșirea standard.

/dev/stderr Ieșirea de eroare standard.

/dev/fd/n Fișierul asociat cu descriptorul fișierului deschis n.

Acestea sunt utile în special pentru mesajele de eroare. De exemplu:

imprima "Tu suflat aceasta!" > "/dev/stderr"

întrucât altfel ar trebui să utilizați

imprima "Tu suflat aceasta!" | "pisică 1>&2"

Următoarele nume de fișiere speciale pot fi utilizate cu |& operator de co-proces pentru creare
Conexiuni de rețea TCP/IP:

/inet/tcp/lport/rhost/raport
/inet4/tcp/lport/rhost/raport
/inet6/tcp/lport/rhost/raport
Fișiere pentru o conexiune TCP/IP pe portul local lport la gazdă la distanță rhost pe telecomandă
port raport. Utilizați un port de 0 pentru ca sistemul să aleagă un port. Utilizare /inet4 pentru a forța
o conexiune IPv4 și /inet6 pentru a forța o conexiune IPv6. Simplu /inet folosește
implicit de sistem (cel mai probabil IPv4).

/inet/udp/lport/rhost/raport
/inet4/udp/lport/rhost/raport
/inet6/udp/lport/rhost/raport
Similar, dar utilizați UDP/IP în loc de TCP/IP.

Numeric funcţii
AWK are următoarele funcții aritmetice încorporate:

atan2(y, x) Întoarce arctangente a a / x în radiani.

cos (expres) Returnează cosinusul lui expres, care este în radiani.

exp (expres) Funcția exponențială.

int(expres) Trunchiază la un întreg.

Buturuga(expres) Funcția logaritmului natural.

rand() Returnează un număr aleatoriu N, între 0 și 1, astfel încât 0 ≤ N <1.

păcat(expres) Întoarceți sinusul lui expres, care este în radiani.

sqrt(expres) Returnează rădăcina pătrată a expres.

srand([expres]) Utilizare expres ca noua sămânță pentru generatorul de numere aleatorii. Daca nu expres is
cu condiția, folosiți ora din zi. Întoarceți sămânța anterioară pentru aleatoriu
generator de numere.

Şir funcţii
Bălălău are următoarele funcții șir încorporate:

asorteaza(s [, d [, cum] ]) Returnează numărul de elemente din tabloul sursă s. Sortați
conținutul s folosind bălălăuregulile normale pentru compararea valorilor și
înlocuiți indicii valorilor sortate s cu secvențial
numere întregi care încep cu 1. Dacă tabloul de destinație opțional d is
specificat, primul duplicat s în d, apoi sortați d, părăsind
indici ai tabloului sursă s neschimbat. Șirul opțional cum
controlează direcția și modul de comparare. Valori valabile pentru
cum sunt valabile pentru oricare dintre șirurile PROCINFO["sorted_in"]. Ea
poate fi, de asemenea, numele unei funcții de comparare definite de utilizator ca
descris în PROCINFO["sorted_in"].

asorti(s [, d [, cum] ])
Returnează numărul de elemente din tabloul sursă s. Comportamentul
este la fel ca acela din asort(), cu excepția faptului că matricea Indicii sunt
folosit pentru sortare, nu pentru valorile matricei. Când ați terminat, matricea este
indexate numeric, iar valorile sunt cele ale originalului
indici. Se pierd valorile originale; oferi astfel o secundă
matrice dacă doriți să păstrați originalul. Scopul
șir opțional cum este aceeași cu cea descrisă în asort() de mai sus.

gensub(r, s, h [, t]) Căutați șirul țintă t pentru potrivirile expresiei regulate
r. Dacă h este un șir care începe cu g or G, apoi înlocuiți-le pe toate
meciuri de r cu s. In caz contrar, h este un număr care indică care
meci de r a inlocui. Dacă t nu este furnizat, utilizați $0 in schimb.
În textul înlocuitor s, secvența \n, În cazul în care n este o cifră
de la 1 la 9, poate fi folosit pentru a indica doar textul care se potrivește
il n'a subexpresie între paranteze. Secvența \0 reprezintă
întregul text potrivit, la fel ca și personajul &. Spre deosebire de sub()
și gsub(), șirul modificat este returnat ca rezultat al
funcția, iar șirul țintă inițial este nu schimbat.

gsub(r, s [, t]) Pentru fiecare subșir care se potrivește cu expresia regulată r în sfoară
t, înlocuiți șirul s, și returnați numărul de
substituiri. Dacă t nu este furnizat, utilizați $0. O & în
textul de înlocuire este înlocuit cu textul care a fost de fapt
potrivite. Utilizare \& pentru a obține un literal &. (Acest lucru trebuie să fie tastat ca
„\\&”; vedea BĂLĂLĂU: Eficace AWK Programare pentru o discutie mai completa
a regulilor pentru &'s și barele oblice inverse în textul de înlocuire al
sub(), gsub(), și gensub().)

index(s, t) Returnează indexul șirului t în sfoară s, sau 0 dacă t nu este
prezent. (Acest lucru implică faptul că indicii caracterelor încep de la unu.) It
este o eroare fatală pentru a utiliza o constantă regexp t.

lungime([s]) Returnează lungimea șirului s, sau lungimea de $0 if s nu este
furnizate. Ca extensie non-standard, cu un argument de matrice,
lungime() returnează numărul de elemente din matrice.

Meci(s, r [, a]) Reveniți poziția în s unde expresia regulată r apare sau
0 dacă r nu este prezent și setați valorile pentru RSTART și LUNGIME.
Rețineți că ordinea argumentelor este aceeași ca și pentru ~ operator:
str ~ re. Dacă matrice a este furnizat, a este curățată și apoi elemente
1 prin n sunt umplute cu porțiuni de s care se potrivesc cu
subexpresia corespunzătoare între paranteze în r. Al 0-lea element
of a conţine porţiunea de s egalat de întregul regulat
expresie r. Indicele a[n, "start"], și a[n, "lungime"]
furnizați indicele de pornire în șir și, respectiv, lungime,
a fiecărui subșir de potrivire.

împărțit(s, a [, r [, seps] ])
Împărțiți șirul s în matrice a și matricea de separatoare seps
asupra expresiei regulate r, și returnează numărul de câmpuri.
Valorile elementului sunt porțiuni ale s care se potrivea r. Valoarea a
seps[i] este separatorul care a apărut în fața a[i+1]. Dacă r
este omis, FPAT este folosit în schimb. Matricele a și seps sunt
curățat mai întâi. Divizarea se comportă identic cu împărțirea câmpului
cu FPAT, descris mai sus.

Despică(s, a [, r [, seps] ])
Împărțiți șirul s în matrice a și matricea de separatoare seps
asupra expresiei regulate rși returnează numărul de câmpuri. Dacă
r este omis, FS este folosit în schimb. Matricele a și seps sunt
curățat mai întâi. seps[i] este separatorul de câmp potrivit de r
între a[i] și a[i+1]. Dacă r este un singur spațiu, apoi conducător
spatiu alb in s intră în elementul de matrice suplimentară seps[0] și
spațiile albe din urmă intră în elementul de matrice suplimentară seps[n],
Unde n este valoarea returnată a Despică(s, a, r, seps). Despicare
se comportă identic cu împărțirea câmpului, descrisă mai sus.

sprintf (fmt, expr-list) expr-list în conformitate cu fmt, și returnează șirul rezultat.

strtonum(str) Examina strși returnează valoarea sa numerică. Dacă str începe cu a
conducere 0, tratați-l ca un număr octal. Dacă str începe cu a
conducere 0x or 0X, tratați-l ca pe un număr hexazecimal. In caz contrar,
presupunem că este un număr zecimal.

sub(r, s [, t]) La fel ca gsub(), dar înlocuiți numai primul subșir potrivit.

substr(s, i [, n]) Întoarceți cel mult n-subşirul de caractere al s începând de la i. Dacă n
este omis, utilizați restul s.

pentru a reduce(str) Returnează o copie a șirului str, cu toate caracterele majuscule
in str traduse la omologii lor cu litere mici corespunzătoare.
Caracterele non-alfabetice sunt lăsate neschimbate.

tupper(str) Returnează o copie a șirului str, cu toate caracterele minuscule
in str traduse în omologii lor majuscule corespunzătoare.
Caracterele non-alfabetice sunt lăsate neschimbate.

Bălălău este conștient de multiocteți. Aceasta înseamnă că index(), lungime(), substr() și Meci() toate funcționează
în termeni de caractere, nu de octeți.

Timp funcţii
Deoarece una dintre utilizările principale ale programelor AWK este procesarea fișierelor jurnal care conțin timp
informații de ștampilă, bălălău furnizează următoarele funcţii pentru obţinerea mărcilor de timp şi
formatându-le.

mktime(dataspec)
Întoarce dataspec într-o ștampilă de timp de aceeași formă ca cea returnată de sistem (), și
returnează rezultatul. The dataspec este un șir de formă AAAA MM DD HH MM SS[
DST]. Conținutul șirului reprezintă șase sau șapte numere reprezentând
respectiv întregul an inclusiv secolul, luna de la 1 la 12, ziua de
luna de la 1 la 31, ora din zi de la 0 la 23, minutul de la 0 la
59, al doilea de la 0 la 60 și un steag opțional pentru ora de vară. Valorile
dintre aceste numere nu trebuie să se încadreze în intervalele specificate; de exemplu, o oră
de -1 înseamnă cu 1 oră înainte de miezul nopții. Calendarul gregorian de origine-zero este
presupus, cu anul 0 precedent anul 1 și anul -1 precedent anul 0. Ora este
presupus a fi în fusul orar local. Dacă indicatorul de ora de vară este pozitiv,
se presupune că ora este ora de vară; dacă este zero, se presupune că timpul este
să fie timp standard; iar dacă este negativ (prestabilit), mktime() încercări de a determina
dacă ora de vară este în vigoare pentru ora specificată. Dacă dataspec
nu conține suficiente elemente sau dacă timpul rezultat este în afara intervalului,
mktime() returnează -1.

strftime([format [, timestamp-ul[, utc-steag]]])
Format timestamp-ul conform caietului de sarcini din format. Dacă utc-steag is
prezent și este diferit de zero sau non-null, rezultatul este în UTC, în caz contrar rezultatul
este la ora locală. The timestamp-ul ar trebui să aibă aceeași formă cu cea returnată de
sistem (). Dacă timestamp-ul lipsește, se utilizează ora curentă. Dacă format
lipsește, un format implicit echivalent cu rezultatul data(1) este utilizat. The
formatul implicit este disponibil în PROCINFO["strftime"]. Vezi caietul de sarcini pentru
il strftime() funcția în ISO C pentru conversiile de format care sunt garantate
a fi disponibil.

sistem () Returnează ora curentă a zilei ca număr de secunde de la Epocă
(1970-01-01 00:00:00 UTC pe sistemele POSIX).

Pic Manipularea funcţii
Bălălău furnizează următoarele funcții de manipulare a biților. Ele funcționează prin conversia dublelor
valori de precizie în virgulă mobilă la uintmax_t numere întregi, făcând operația și apoi
convertind rezultatul înapoi în virgulă mobilă. Functiile sunt:

și(v1, v2 [, ...]) Returnează AND-ul pe biți al valorilor furnizate în lista de argumente.
Trebuie să fie cel puțin două.

compl(val) Returnează complementul pe biți al val.

lshift(val, conta) Returnează valoarea lui val, deplasat la stânga conta biți.

sau(v1, v2 [, ...]) Returnează OR pe biți a valorilor furnizate în lista de argumente.
Trebuie să fie cel puțin două.

rshift(val, conta) Returnează valoarea lui val, deplasat imediat conta biți.

xor(v1, v2 [, ...]) Returnează XOR pe biți a valorilor furnizate în lista de argumente.
Trebuie să fie cel puțin două.

Tip Funcţie
Următoarea funcție este pentru utilizare cu tablouri multidimensionale.

isarray(x)
Returnează adevărat dacă x este o matrice, false altfel.

Internaționalizare funcţii
Următoarele funcții pot fi utilizate din programul dumneavoastră AWK pentru traducerea șirurilor
în timpul rulării. Pentru detalii complete, vezi BĂLĂLĂU: Eficace AWK Programare.

bindtextdomain(director [, domeniu])
Specificați directorul în care bălălău caută pe .gmo dosare, în cazul în care nu vor sau
nu poate fi plasat în locațiile „standard” (de exemplu, în timpul testării). Se întoarce
directorul unde domeniu este „legat”.
Valoarea implicită domeniu este valoarea de DOMENIUL TEXT. Dacă director este șirul nul
(""), apoi bindtextdomain() returnează legarea curentă pentru data dată domeniu.

dcgettext(şir [, domeniu [, categorie]])
Returnează traducerea lui şir în domeniul text domeniu pentru categoria locală
categorie. Valoarea implicită pentru domeniu este valoarea curentă a DOMENIUL TEXT.
valoarea implicită pentru categorie is „LC_MESSAGES”.
Dacă furnizați o valoare pentru categorie, trebuie să fie un șir egal cu unul dintre cele cunoscute
categoriile locale descrise în BĂLĂLĂU: Eficace AWK Programare. Trebuie de asemenea
furnizați un domeniu text. Utilizare DOMENIUL TEXT dacă doriți să utilizați domeniul curent.

dcngettext(string1, string2, număr [, domeniu [, categorie]])
Întoarceți forma de plural folosită pentru număr a traducerii lui string1 și string2 in
domeniul text domeniu pentru categoria locală categorie. Valoarea implicită pentru domeniu is
valoarea curentă a DOMENIUL TEXT. Valoarea implicită pentru categorie is „LC_MESSAGES”.
Dacă furnizați o valoare pentru categorie, trebuie să fie un șir egal cu unul dintre cele cunoscute
categoriile locale descrise în BĂLĂLĂU: Eficace AWK Programare. Trebuie de asemenea
furnizați un domeniu text. Utilizare DOMENIUL TEXT dacă doriți să utilizați domeniul curent.

DEFINIT DE UTILIZATOR FUNCȚII


Funcțiile din AWK sunt definite după cum urmează:

funcţie nume(parametru listă) { Declarații }

Funcțiile sunt executate atunci când sunt apelate din interiorul expresiilor fie în modele, fie
actiuni. Parametrii efectivi furnizați în apelul funcției sunt utilizați pentru a instanția
parametrii formali declarați în funcție. Matricele sunt transmise prin referință, altele
variabilele sunt transmise după valoare.

Deoarece funcțiile nu făceau inițial parte din limbajul AWK, prevederea pentru local
variabilele este destul de neîndemânatic: sunt declarați ca parametri suplimentari în lista de parametri.
Convenția este de a separa variabilele locale de parametrii reali prin spații suplimentare în
lista de parametri. De exemplu:

funcţie f(p, q, a, b) # a și b sunt local
{
...
}

/abc/ { ... ; f(1, 2) ; ... }

Paranteza din stânga într-un apel de funcție este necesară pentru a urma imediat funcția
nume, fără niciun spațiu alb intermediar. Acest lucru evită o ambiguitate sintactică cu
operator de concatenare. Această restricție nu se aplică funcțiilor încorporate enumerate
de mai sus.

Funcțiile se pot apela reciproc și pot fi recursive. Parametrii funcției utilizați ca locali
variabilele sunt inițializate la șirul nul și la numărul zero la invocarea funcției.

Utilizare reveni expres pentru a returna o valoare dintr-o funcție. Valoarea returnată este nedefinită dacă nu
valoarea este furnizată sau dacă funcția revine prin „cădere” la sfârșit.

Ca bălălău extensie, funcțiile pot fi apelate indirect. Pentru a face acest lucru, atribuiți numele lui
funcția să fie apelată, ca șir, la o variabilă. Apoi utilizați variabila ca și cum ar fi
au fost numele unei funcții, prefixate cu un @ semnează, așa:
funcţie functia mea()
{
imprima "functia mea numit"
...
}

{ ...
the_func = "functia mea"
@the_func() # apel prin the_func la myfunc
...
}
Începând cu versiunea 4.1.2, aceasta funcționează cu funcții definite de utilizator, funcții încorporate și
funcții de extensie.

If --puf a fost furnizat, bălălău avertizează despre apelurile la funcții nedefinite în timpul analizei,
în loc de la timpul de rulare. Apelarea unei funcții nedefinite în timpul rulării este o eroare fatală.

Cuvantul FUNC poate fi folosit în locul funcţie, deși acest lucru este depreciat.

DINAMIC SE INCARCA NOU FUNCȚII


Puteți adăuga dinamic noi funcții încorporate la rulare bălălău interpret cu
@sarcină afirmație. Detaliile complete depășesc scopul acestei pagini de manual; vedea BĂLĂLĂU:
Eficace AWK Programare.

SEMNALE


bălălău Profiler acceptă două semnale. SIGUSR1 determină să elimine un profil și o funcție
stiva de apeluri la fișierul de profil, care este fie awkprof.out, sau orice fișier a fost numit
cu --profil opțiune. Apoi continuă să ruleze. LUMEA cauze bălălău a arunca
stiva de apeluri de profil și funcție și apoi ieșiți.

INTERNAȚIONALIZAREA


Constantele șiruri de caractere sunt secvențe de caractere cuprinse între ghilimele duble. În non-engleză
medii de vorbire, este posibil să se marcheze șiruri în programul AWK ca fiind necesare
traducere în limba naturală locală. Astfel de șiruri sunt marcate în programul AWK cu
o liniuță de subliniere („_”). De exemplu,

bălălău 'ÎNCEPE { imprima "Buna ziua, lume" }'

imprimă întotdeauna Salut, lume. Dar,

bălălău 'ÎNCEPE { imprima _"Buna ziua, lume" }'

s-ar putea tipări bonjour, Monde în Franța.

Există mai mulți pași implicați în producerea și rularea unui program AWK localizabil.

1. Adăugați un ÎNCEPE acțiune pentru a atribui o valoare lui DOMENIUL TEXT variabilă pentru a seta domeniul text
la un nume asociat programului dvs.:

ÎNCEPE { DOMENIUL TEXT = "programul meu" }

Asta permite bălălău pentru a găsi .gmo fișier asociat cu programul dvs. Fără asta
Etapa, bălălău folosește mesaje domeniul text, care probabil nu conține traduceri
pentru programul tău.

2. Marcați toate șirurile care ar trebui traduse cu caractere de subliniere.

3. Dacă este necesar, utilizați dcgettext() şi / sau bindtextdomain() funcții din programul dvs.,
Asa Potrivit.

4. Alerga bălălău --gen-pot -f myprog.awk > myprog.pot pentru a genera a .oală fișier pentru
programul.

5. Furnizați traduceri adecvate și construiți și instalați cele corespunzătoare .gmo fișiere.

Caracteristicile de internaționalizare sunt descrise în detaliu în BĂLĂLĂU: Eficace AWK
Programare.

POSIX COMPATIBILITATE


Un obiectiv principal pentru bălălău este compatibilitatea cu standardul POSIX, precum și cu
cea mai recentă versiune a lui Brian Kernighan Wow. În acest scop, bălălău încorporează următoarele
caracteristici vizibile de utilizator care nu sunt descrise în cartea AWK, dar fac parte din Brian
Versiunea lui Kernighan a Wow, și sunt în standardul POSIX.

Cartea indică faptul că atribuirea variabilelor în linia de comandă are loc când Wow ar fi altfel
deschide argumentul ca fișier, care este după ÎNCEPE regula este executată. Cu toate acestea, în
implementările anterioare, când o astfel de atribuire apărea înaintea oricăror nume de fișiere,
s-ar întâmpla însărcinarea înainte il ÎNCEPE regula a fost executată. Aplicațiile au ajuns să depindă de
această caracteristică." Când Wow a fost modificat pentru a se potrivi cu documentația sa, the -v opțiune pentru
atribuirea de variabile înainte ca execuția programului să fie adăugată pentru a găzdui aplicațiile care
depindea de vechiul comportament. (Această caracteristică a fost convenită atât de către Bell
Laboratoarele și dezvoltatorii GNU.)

La procesarea argumentelor, bălălău folosește opțiunea specială „--” pentru a semnala sfârșitul
argumente. În modul de compatibilitate, avertizează despre opțiunile nedefinite, dar în caz contrar ignoră.
În funcționarea normală, astfel de argumente sunt transmise programului AWK pentru ca acesta să fie procesat.

Cartea AWK nu definește valoarea de returnare a srand(). Standardul POSIX o are
returnează sămânța pe care o folosea, pentru a permite urmărirea secvențelor de numere aleatoare.
Prin urmare srand() in bălălău returnează și sămânța actuală.

Alte caracteristici noi sunt: ​​Utilizarea multiplelor -f opțiuni (de la MKS Wow); MEDIU matrice;
il \a, și \v secvențe de evacuare (realizate inițial în bălălău și alimentat înapoi în Clopot
versiunea laboratoare); cel pentru a reduce() și topper() funcții încorporate (de la Bell
versiunea laboratoare); și specificațiile de conversie ISO C în printf (făcut primul în
versiunea Bell Laboratories).

ISTORIC CARACTERISTICI


Există o caracteristică a implementărilor istorice AWK care bălălău suportă: Este posibil
pentru a apela lungime() funcție încorporată nu numai fără argument, ci chiar și fără
paranteze! Prin urmare,

a = lungime # Sfânt ceva 60, batman!

este la fel ca oricare dintre

a = lungime()
a = lungime ($0)

Utilizarea acestei caracteristici este o practică slabă și bălălău emite un avertisment cu privire la utilizarea sa dacă --puf is
specificate pe linia de comandă.

GNU PRELUNGIRI


Bălălău are un număr prea mare de extensii la POSIX Wow. Ele sunt descrise în aceasta
secțiune. Toate extensiile descrise aici pot fi dezactivate prin invocare bălălău cu
--tradiţional or --posix opțiuni.

Următoarele caracteristici ale bălălău nu sunt disponibile în POSIX Wow.

· Nu se efectuează căutarea unei căi pentru fișierele numite prin intermediul -f opțiune. De aceea AWKPATH
variabila de mediu nu este specială.

· Nu există nicio facilitate pentru includerea fișierelor (bălălău's @include mecanism).

· Nu există nicio facilitate pentru adăugarea dinamică de noi funcții scrise în C (bălălău's @sarcină
mecanism).

· \x secvență de evadare. (Dezactivat cu --posix.)

· Abilitatea de a continua rândurile după ? și :. (Dezactivat cu --posix.)

· Constante octale și hexazecimale în programele AWK.

· ARGIND, BINMODE, ERRNO, PUF, RT și DOMENIUL TEXT variabilele nu sunt speciale.

· IGNORECASE variabilă și efectele sale secundare nu sunt disponibile.

· LĂȚIMILE CÂMPULUI împărțirea câmpului cu lățime variabilă și fixă.

· FPAT divizarea variabilelor și a câmpurilor pe baza valorilor câmpului.

· PROCINFO matricea nu este disponibilă.

· Utilizarea RS ca expresie regulată.

· Numele de fișiere speciale disponibile pentru redirecționarea I/O nu sunt recunoscute.

· |& operator pentru crearea co-proceselor.

· BEGINFILE și ENDFIILE modele speciale nu sunt disponibile.

· Abilitatea de a împărți caracterele individuale folosind șirul nul ca valoare a FS,
iar ca al treilea argument la Despică().

· Un al patrulea argument opțional pentru Despică() pentru a primi textele separatoare.

· Al doilea argument opțional pentru închide() Funcția.

· Al treilea argument opțional pentru Meci() Funcția.

· Abilitatea de a utiliza specificatorii de poziție cu printf și sprintf().

· Abilitatea de a transmite o matrice către lungime().

· și(), asort(), asorti(), bindtextdomain(), compl(), dcgettext(), dcngettext(),
gensub(), lshift(), mktime(), sau(), patsplit(), rshift(), strftime(), strtonum(),
sistem () și xor() funcții.

· Șiruri de caractere localizabile.

Cartea AWK nu definește valoarea de returnare a închide() Funcția. Bălălău's închide()
returnează valoarea de la fclose(3) sau pclose(3), la închiderea unui fișier de ieșire sau a unei conducte,
respectiv. Returnează starea de ieșire a procesului la închiderea unei conducte de intrare. The
valoarea returnată este -1 dacă fișierul numit, conducta sau co-procesul nu a fost deschis cu a
redirecționare.

Cand bălălău este invocat cu --tradiţional opțiunea, dacă fs argument la -F opțiunea este
„t”, atunci FS este setat la caracterul tabulator. Rețineți că tastarea bălălău -F\t ... pur și simplu cauze
shell pentru a cita „t” și nu transmite „\t” la -F opțiune. Deoarece acesta este un
caz special mai degrabă urât, nu este comportamentul implicit. Acest comportament, de asemenea, nu
apar dacă --posix a fost specificat. Pentru a obține cu adevărat un caracter tabulator ca câmp
separator, cel mai bine este să folosiți ghilimele simple: bălălău -F'\t' ....

MEDIUL VARIABILE


AWKPATH variabila de mediu poate fi utilizată pentru a furniza o listă de directoare care bălălău
caută atunci când caută fișiere numite prin intermediul -f, --file, -i și --include Opțiuni. Dacă
căutarea inițială eșuează, calea este căutată din nou după adăugare .awk la numele fișierului.

AWKLIBPATH variabila de mediu poate fi utilizată pentru a furniza o listă de directoare care bălălău
caută atunci când caută fișiere numite prin intermediul -l și --sarcină opțiuni.

GAWK_READ_TIMEOUT variabila de mediu poate fi utilizată pentru a specifica un timeout în
milisecunde pentru citirea intrării de la un terminal, conductă sau comunicație bidirecțională inclusiv
prize.

Pentru conectarea la o gazdă la distanță prin priză, GAWK_SOCK_RETRIES controlează numărul de
reîncercări și GAWK_MSEC_SLEEP și intervalul dintre reîncercări. Intervalul este în
milisecunde. Pe sisteme care nu acceptă tu dormi(3), valoarea este rotunjită la an
număr integral de secunde.

If POSIXLY_CORRECT există, deci, în mediu bălălău se comporta exact ca si cum --posix HAD
a fost specificat pe linia de comandă. Dacă --puf a fost specificat, bălălău emite un avertisment
mesaj în acest sens.

EXIT STAREA


În cazul în care ieşire declarația este folosită cu o valoare, atunci bălălău iese cu valoarea numerică dată
să-l.

În caz contrar, dacă nu au existat probleme în timpul execuției, bălălău iese cu valoarea lui C
constant EXIT_SUCCESS. Acesta este de obicei zero.

Dacă apare o eroare, bălălău iese cu valoarea constantei C EXIT_FAILURE. Acest lucru este
de obicei unul.

If bălălău iese din cauza unei erori fatale, starea de ieșire este 2. Pe sistemele non-POSIX, aceasta
valoarea poate fi mapată la EXIT_FAILURE.

VERSIUNE INFORMAŢII


Această pagină de manual documente bălălău, Versiunea 4.1.

AUTORI


Versiunea originală a UNIX Wow a fost proiectat și implementat de Alfred Aho, Peter
Weinberger și Brian Kernighan de la Laboratoarele Bell. Brian Kernighan continuă
întreține și sporește.

Paul Rubin și Jay Fenlason, de la Free Software Foundation, au scris bălălău, pentru a fi compatibil
cu versiunea originală a Wow distribuit în Ediția a șaptea UNIX. John Woods
a contribuit cu o serie de remedieri de erori. David Trueman, cu contribuții de la Arnold Robbins,
făcut bălălău compatibil cu noua versiune de UNIX Wow. Arnold Robbins este curentul
întreţinător.

Vedea BĂLĂLĂU: Eficace AWK Programare pentru o listă completă a contribuitorilor la bălălău şi sa
documentație.

A se vedea README de fișier în bălălău distribuție pentru informații actualizate despre menținători
și ce porturi sunt acceptate în prezent.

GÂNDAC RAPOARTE


Dacă găsiți o eroare în bălălău, vă rugăm să trimiteți e-mail la [e-mail protejat]. Vă rog
includeți sistemul dvs. de operare și revizuirea acestuia, versiunea bălălău (De la bălălău --versiune),
ce compilator C ai folosit pentru a-l compila și un program de testare și date care sunt la fel de mici
posibil pentru reproducerea problemei.

Înainte de a trimite un raport de eroare, vă rugăm să faceți următoarele lucruri. În primul rând, verificați dacă aveți
ultima versiune de bălălău. Multe erori (de obicei subtile) sunt remediate la fiecare lansare,
iar dacă al tău este depășit, este posibil ca problema să fi fost deja rezolvată. În al doilea rând, vezi
dacă se setează variabila de mediu LC_ALL la LC_ALL=C face ca lucrurile să se comporte ca tine
aştepta. Dacă da, este o problemă de localitate și poate fi sau nu o eroare. În sfârșit, vă rog
citiți cu atenție această pagină de manual și manualul de referință pentru a vă asigura că ceea ce credeți este a
bug este într-adevăr, în loc de doar o ciudatenie în limbaj.

Orice ai face, fă NU postați un raport de eroare în comp.lang.awk. In timp ce bălălău Dezvoltatorii
Citiți ocazional acest grup de știri, postând rapoarte de eroare, există o modalitate nesigură de a raporta
gandaci. În schimb, vă rugăm să utilizați adresele de e-mail indicate mai sus. Într-adevăr.

Dacă utilizați un sistem bazat pe GNU/Linux sau BSD, poate doriți să trimiteți un raport de eroare la
vânzătorul distribuției dvs. E în regulă, dar vă rugăm să trimiteți o copie oficialului
de asemenea, adresa de e-mail, deoarece nu există nicio garanție că raportul de eroare va fi redirecționat către
il bălălău întreţinător.

Utilizați gawk online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

Comenzi Linux

Ad