Awk este un limbaj de scripting folosit pentru manipularea datelor și generarea de rapoarte.Limbajul de programare awk comandă nu necesită compilarea, și permite utilizatorului să utilizeze variabile, Funcții numerice, funcții șir, și operatori logici. Awk este un utilitar care permite unui programator să scrie programe minuscule, dar eficiente, sub formă de declarații care definesc modele de text care trebuie căutate în fiecare linie a unui document și acțiunea care trebuie luată atunci când se găsește o potrivire într-o linie., Awk este folosit mai ales pentru scanarea și procesarea modelelor. Caută unul sau mai multe fișiere pentru a vedea dacă conțin linii care se potrivesc cu modelele specificate și apoi efectuează acțiunile asociate. Awk este abreviat de la numele dezvoltatorilor-Aho, Weinberger și Kernighan. ce putem face cu AWK ?
1. Operații AWK:
(A) scanează un fișier linie cu linie
(b) împarte fiecare linie de intrare în câmpuri
(c) compară linia/câmpurile de intrare cu modelul
(d) efectuează acțiuni pe linii potrivite
2., Util pentru:
(a) transforma fișiere de Date
(b) Produce rapoarte formatate
3. Constructe de programare:
(a) Format linii de ieșire
(b) Aritmetica și șir de operațiuni
(c) Condiționale și bucle
Sintaxa:
awk options 'selection _criteria {action }' input-file > output-file
Opțiuni:
-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument.-F fs : Use fs for the input field separator
Exemplu de Comenzi
Exemplu:
luați în Considerare următorul text fișier ca fișier de intrare pentru toate cazurile de mai jos.
$cat > employee.txt
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
1. Implicit comportamentul Awk: implicit Awk imprimă fiecare linie de date din fișierul specificat.,
$ awk '{print}' employee.txt
Ieșire:
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
În exemplul de mai sus, nici un model este dat. Deci acțiunile sunt aplicabile tuturor liniilor. Acțiune de imprimare fără nici un argument imprimă întreaga linie în mod implicit, astfel încât imprimă toate liniile fișierului fără eșec.
2. Imprimați liniile care se potrivesc cu modelul dat.
$ awk '/manager/ {print}' employee.txt
Ieșire:
ajay manager account 45000varun manager sales 50000amit manager account 47000
În exemplul de mai sus, awk comanda printuri de toate linia care se potrivește cu cea de „manager”.
3., Împărțirea unei linii în câmpuri : pentru fiecare înregistrare adică linie, comanda awk împarte înregistrarea delimitată de caracterul spațiului alb în mod implicit și o stochează în variabilele $N. Dacă linia are 4 cuvinte, aceasta va fi stocată în $1, $2, $3 și $4 respectiv. De asemenea, $0 reprezintă întreaga linie.
$ awk '{print $1,$4}' employee.txt
Ieșire:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
În exemplul de mai sus, 1 $și 4 reprezintă Numele și Salariul domeniile respectiv.,
construit în variabile în Awk
variabilele încorporate Awk includ variabilele de câmp—$1, $2, $3, și așa mai departe ($0 este întreaga linie) — care rupe o linie de text în cuvinte individuale sau piese numite câmpuri.
NR: comanda NR păstrează un număr curent al numărului de înregistrări de intrare. Amintiți-vă că înregistrările sunt de obicei linii. Comanda Awk efectuează declarațiile de model / acțiune o dată pentru fiecare înregistrare într-un fișier.
NF: comanda NF păstrează un număr al numărului de câmpuri din înregistrarea curentă de intrare.,
FS: comanda FS conține caracterul separator de câmp care este utilizat pentru a împărți câmpurile de pe linia de intrare. Valoarea implicită este „spațiu alb”, adică spațiu și caractere tab. FS pot fi realocate la un alt caracter (de obicei, în începe) pentru a schimba separatorul de câmp.
RS: RS comandă stochează caracterul curent separator de înregistrare. Deoarece, în mod implicit, o linie de intrare este înregistrarea de intrare, caracterul implicit separator de înregistrare este o linie nouă. OFS: OFS comandă stochează separatorul de câmp de ieșire, care separă câmpurile atunci când Awk le imprimă. Implicit este un spațiu gol., Ori de câte ori print are mai mulți parametri separați cu virgule, se va imprima valoarea OFS între fiecare parametru.
ORS: comanda ORS stochează separatorul de înregistrări de ieșire, care separă liniile de ieșire atunci când Awk le imprimă. Implicit este un caracter newline. print emite automat conținutul ORS la sfârșitul a ceea ce este dat pentru a imprima.,
Exemple:
Utilizare NR built-in variabile (Afișare Număr de Linie)
$ awk '{print NR,$0}' employee.txt
Ieșire:
1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000
În exemplul de mai sus, awk comanda cu NR imprimă toate liniile, împreună cu numărul de linie.
Utilizarea NF built-in variabile (Afișare Ultimul Câmp)
$ awk '{print $1,$NF}' employee.txt
Ieșire:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
În exemplul de mai sus $1 reprezintă Numele și $NF reprezintă Salariul. Putem obține salariul folosind $NF, unde $NF reprezintă ultimul câmp.,
o Altă utilizare a NR built-in variabile (Afișare Linie De la 3 la 6)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
Ieșire:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
Exemple
Pentru un anumit fișier text:
$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3
1) Pentru a imprima primul element, împreună cu numărul de rând(NR) separate cu ” – ” de la fiecare linie în geeksforgeeks.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2) Pentru a reveni în al doilea rând/element de geeksforgeeks.,est linia prezent în fișier:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) A conta linii intr-un fisier:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) Imprimare linii cu mai mult de 10 caractere:
$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3
7) Pentru a găsi/check pentru orice șir în orice coloana specific:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) Pentru a imprima pătrate din primele numere de la 1 la n 6:
$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36
Acest articol este contribuit, prin Anshika Goyal și Praveen Negi., Dacă vă place GeeksforGeeks și ar dori să contribuie, de asemenea, puteți scrie un articol folosind contribute.geeksforgeeks.org sau e-mail la art. [email protected]. Vezi articolul apare pe GeeksforGeeks pagina principală și de a ajuta alte Geeks.