A.W.K. | |
---|---|
Clasa de limba | scriptat , procedural , bazat pe date |
Aparut in | 1977 |
Autor | Alfred Aho , Peter Weinberger și Brian Kernighan |
Dezvoltator | Alfred Aho , Brian Kernigan și Peter Weinberger [d] |
Eliberare | POSIX.1-2017 |
Tip sistem | Nu |
Implementări majore | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilator), Awka (compilator) |
Dialectele | vechi awk oawk 1977, nou awk nawk 1985, GNU Awk gawk |
A fost influențat | C , SNOBOL 4, coajă Bourne |
influențat | Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua |
Fișiere media la Wikimedia Commons |
AWK este un limbaj de scripting asemănător C pentru analizarea și procesarea rând cu linie a unui flux de intrare (de exemplu, un fișier text) conform modelelor date ( expresii regulate ). Poate fi folosit în scripturi de linie de comandă .
Numele AWK este alcătuit din primele litere ale numelor dezvoltatorilor limbajului - Aho , Weinberger ( ing. Peter J. Weinberger ) și Kernighan . Prima versiune a fost scrisă în 1977 la AT&T Bell Laboratories .
AWK tratează fluxul de intrare ca pe o listă de intrări. Fiecare intrare este împărțită în câmpuri. Pe baza acestor informații, se realizează un algoritm de procesare definit de programator. În mod implicit, separatorul de înregistrări este un caracter newline (adică înregistrările sunt aceleași cu liniile), separatorul de câmpuri este un spațiu sau un caracter de tabulație sau o secvență de astfel de caractere. Caracterele de separare pot fi definite explicit în program. Caracterul separator de câmpuri poate fi specificat și pe linia de comandă.
Un program AWK constă din instrucțiuni (reguli) care arată astfel:
șablon { acțiune } șablon { acțiune } ...Fiecare intrare este comparată cu toate modelele pe rând și de fiecare dată când se potrivește cu modelul, acțiunea specificată este efectuată. Dacă șablonul nu este specificat, atunci acțiunea este efectuată pentru orice intrare. Dacă nu este specificată nicio acțiune , atunci intrarea este afișată. AWK are, de asemenea, 2 șabloane predefinite BEGIN și END . BEGIN este executat înainte ca fluxul de intrare să fie procesat. END - după procesarea ultimei înregistrări a fluxului de intrare.
O acțiune poate consta dintr-o succesiune de instrucțiuni separate prin punct și virgulă, o linie nouă sau o paranteză de închidere.
Bucla for, într-o formă orientată spre procesarea matricelor de indici , arată astfel:
for ( secțiunea de inițializare ; secțiunea de condiții ; secțiunea de actualizare a iteratorului ){ Corpul buclei } pentru (forma asociativă)Bucla for, într-o formă orientată spre procesarea tablourilor asociative , arată astfel:
for ( iterator în matrice ){ Corpul buclei }Variabil | Conţinut | Valoare implicită |
---|---|---|
ARGC | Numărul de argumente ale liniei de comandă | - |
ARGV | Matrice de argumente ale liniei de comandă | - |
MEDIUL | Matrice care conține variabile de mediu | - |
NUME DE FIȘIER | Fișier de intrare procesat | - |
FNR | Înregistrați numărul în fișierul curent | - |
FS | Înregistrați separatorul de câmp la intrare | spații și/sau file |
NF | Numărul de câmpuri din înregistrarea curentă | - |
NR | Numărul de înregistrare (numărul total de înregistrări citite) | - |
OFMT | Format de imprimare a numărului | %.6g |
OFS | Separator de câmpuri pentru înregistrarea de ieșire (caracter) | spații și/sau file |
SRO | Separator de înregistrare în ieșirea programului AWK (caracter) | \0 |
RS | Separator de înregistrare de intrare (caracter) | \0 |
RSTART | Poziția începutului subșirului găsită de funcțiematch | - |
LUNGIME | Lungimea subșirului găsit de funcțiematch | - |
SUBSEP | Separator de index în tablouri multidimensionale | \034 |
Bună lume! »
BEGIN { printează „Hello World!” ; ieșire }Imprimarea lungimii celei mai lungi linii:
{ if ( lungime ( $ 0 ) > max ) max = lungime ( $ 0 ) } END { print max }Tipăriți toate rândurile mai lungi de 80 de caractere:
{ if ( lungime ( $ 0 ) > 80 ) print $ 0 }Tipăriți toate liniile care au cel puțin un câmp:
NF > 0Imprimarea numărului de linii dintr-un fișier:
END { print NR }Imprimarea liniilor ale căror numere sunt multiple de 3:
{ dacă ( FNR % 3 == 0 ) imprimă $ 0 }Tipăriți restul liniei de introducere după primele trei câmpuri:
{ # găsiți începutul celui de-al patrulea câmp... potrivire ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...printează restul șirului de intrare din poziția găsită print substr ( $ 0 , 1 + RLENGTH ) }Comenzi Unix | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Limbaje de programare | |
---|---|
|