Awk

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea altor semnificații, consultați Awk (dezambiguizare) .
AWK
limbaj de programare
Autor Alfred Aho , Peter Weinberger și Brian Kernighan
Data de origine 1977
Ultima versiune IEEE Std 1003.1-2008 (POSIX) / 1985
Utilizare poate manipula șiruri, numere întregi și zecimale, expresii regulate
Paradigme scripting , procedural , bazat pe date [1]
Tastare Slab
Influențată de C , SNOBOL 4, coajă Bourne
A influențat Tcl , AMPL , Perl , Korn shell ( ksh93 , dtksh , tksh ), Lua
Implementare referință
Implementare awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilator), Awka (compilator)
Sistem de operare Multiplatform

AWK (de la inițialele numelor de familie ale autorilor săi, Alfred Aho , Peter Weinberger și Brian Kernighan ) este un limbaj de programare interpretat orientat spre manipularea datelor textuale , atât sub formă de fișiere, cât și de flux de date provenind de la intrarea standard .

Tipuri de variabile

Este un limbaj slab tastat și orice variabilă poate fi considerată ca un șir (poate fi concatenată , numărul său de caractere poate fi numărat etc.), chiar dacă variabilele numerice sunt convertite în numere întregi sau în virgulă mobilă atunci când este necesar, pentru exemplu exemplu în operații aritmetice. Tipul boolean este absent (adică variabile cu o valoare true sau false ), dar orice variabilă poate fi utilizată ca valoare booleană: valoarea 0 , șirul gol ( "" ) sau o variabilă neinițializată sunt considerate false , în timp ce orice altă valoarea este true .

În plus față de variabilele scalare, AWK acceptă și matrici asociative , adică matrici indexate de șiruri cheie. Deoarece orice scalar din AWK poate fi considerat un șir, este de asemenea posibil să se definească tablouri ale căror chei sunt numere întregi secvențiale, dar de obicei, spre deosebire de multe alte limbaje de programare, acest lucru nu aduce niciun avantaj în ceea ce privește performanța de acces, deoarece AWK nu distingeți între matrice secvențiale și asociative.

De exemplu, puteți defini cele două matrice:

 # matrice "secvențială"
arr1 [ 0 ] = "a"
arr1 [ 1 ] = "b"
arr1 [ 2 ] = "c"
# matrice care folosește șiruri ca chei
arr2 [ "foo" ] = 1
arr2 [ "bar" ] = 2

Accesul la matrice se face de obicei prin intermediul cuvântului cheie in , care ciclează pe tastele matricei specificate, cu ordine nedefinită:

 pentru ( i în arr1 ) {
        print i # printează "1", "2", ... NU secvențial
}
pentru ( i în arr2 ) {
        print i # print "foo", "bar" (întotdeauna nesecvențial)
}

În cazul unui tablou secvențial, este posibil să se utilizeze sintaxa în stil C :

 for ( i = 0 ; i < length ( arr1 ); ++ i ) {
        print arr1 [ i ]
}

pentru a obține acces secvențial la valori.

În cele din urmă, AWK acceptă expresii regulate . O expresie regulată (expresie regulată sau regex ) este definită între două bare oblice și este posibil să testați potrivirea dintre o expresie și regex prin operatorul tilde:

 # testați dacă variabila "foo" începe cu o cifră:
if ( foo ~ / ^ [0-9] / ) 
        # ...

Structura unui program

Un program AWK este structurat în conformitate cu o succesiune de directive precum:

 condiții {acțiuni}

Dacă scriptul este furnizat cu unul sau mai multe fișiere sau, în general, un flux de date (de exemplu, prin intrare standard ), acest flux va fi citit linie cu linie de la AWK; pentru fiecare linie, instrucțiunile conținute în script sunt executate secvențial. Pentru fiecare afirmație, dacă starea sa este adevărată pentru rândul curent, se efectuează acțiunile corespunzătoare acelei condiții.

De exemplu, dacă pentru un astfel de program AWK:

 # imprimați numai linii care constau numai din litere mici.
/ ^ [az] + $ / {
        tipăriți 0 USD
}

intrarea este furnizată:

 123
Foo
pluto2

acțiunea print $0 (care tipărește întreaga linie pe ecran) va fi executată numai pentru a doua linie, în timp ce celelalte două vor fi ignorate.

Dacă este specificată o condiție fără o acțiune legată, acțiunea implicită este doar „tipăriți întreaga linie”, deci în exemplul de mai sus am fi putut folosi codul echivalent:

 / ^ [az] + $ /

În schimb, dacă o acțiune este specificată fără o condiție conexă, acțiunea va fi efectuată pentru toate rândurile de intrare.

Conditii speciale

Există două condiții speciale: BEGIN și END. O acțiune cu o condiție BEGIN este întotdeauna executată înainte ca orice intrare să fie procesată, în timp ce o acțiune cu o condiție END este întotdeauna executată după ce toate intrările au fost procesate.

Utilizări

AWK poate fi folosit ca filtru , a fost unul dintre primele instrumente care au apărut de la versiunea 7 a Unix și a câștigat reputația de a fi o modalitate de a adăuga capabilități de calcul la o conductă Unix . AWK este acum inclus printre aplicațiile standard ale fiecărei versiuni recente a sistemului de operare Unix disponibile astăzi. Cu toate acestea, implementările AWK există pentru aproape toate celelalte sisteme de operare.

De obicei AWK este un limbaj interpretat , adică există un fișier executabil numit awk care citește fie din linia de comandă, fie dintr-un fișier programul real scris în limbajul awk și îl aplică unuia sau mai multor fișiere de intrare pentru a produce un rezultat.

Exemple

Salut Lume!

 # executați numai instrucțiunea BEGIN și ieșiți fără să citiți nicio intrare
ÎNCEPE { tipărește "Bună ziua, lume!" }

Notă

  1. ^ Michael Stutz, Începeți cu GAWK: Fundamentele limbajului AWK , pe developerWorks , IBM , 19 septembrie 2006. Accesat la 23 octombrie 2010 (arhivat din original la 20 mai 2011) .
    „[AWK este] adesea numit un limbaj bazat pe date - declarațiile programului descriu datele de intrare pentru a se potrivi și a fi procesate, mai degrabă decât o succesiune de pași ai programului” .

Alte proiecte

linkuri externe

Controlul autorității LCCN (EN) sh87003812 · GND (DE) 4242961-4 · BNF (FR) cb12302957w (data)
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT