Cum se scrie AWK comenzi și scripturi

Comenzi, sintaxă și exemple

Comanda awk este o metodă puternică de procesare sau analiză a fișierelor text - în special a fișierelor de date care sunt organizate de linii (rânduri) și coloane.

Comenzile simple awk pot fi executate din linia de comandă . Sarcinile mai complexe ar trebui să fie scrise ca programe awk (așa-numitele scripturi awk) într-un fișier.

Formatul de bază al unei comenzi awk arată astfel:

awk 'model {action}' input-file 'fișier de ieșire

Aceasta înseamnă: luați fiecare linie a fișierului de intrare; dacă linia conține modelul, aplicați acțiunea la linie și scrieți linia rezultată în fișierul de ieșire. În cazul în care modelul este omis, acțiunea este aplicată tuturor liniilor. De exemplu:

awk '{print $ 5} "tab1.txt> output1.txt

Această instrucțiune ia elementul coloanei 5 a fiecărei linii și o scrie ca o linie în fișierul de ieșire "output.txt". Variabila "$ 4" se referă la a doua coloană. În mod similar, puteți accesa prima, a doua și a treia coloană cu $ 1, $ 2, $ 3, etc. Se presupune că coloanele implicite sunt separate prin spații sau file (așa-numitul spațiu alb). Deci, dacă fișierul de intrare "table1.txt" conține aceste rânduri:

1, Justin Timberlake, Titlu 545, Pret $ 7.30 2, Taylor Swift, Titlu 723, Pret $ 7.90 3, Mick Jagger, Titlu 610, Pret $ 7.90 4, Lady Gaga, Titlu 118, Pret $ 7.30 5, Johnny Cash, Titlu 482, Pret $ 6.50 6, Elvis Presley, Titlu 335, Pret $ 7.30 7, John Lennon, Titlu 271, Pret $ 7.90 8, Michael Jackson, Titlul 373, Pret $ 5.50

Apoi, comanda va scrie următoarele rânduri la fișierul de ieșire "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

Dacă separatorul de coloane este altceva decât spații sau file, cum ar fi o virgulă, puteți specifica că în instrucțiunea awk după cum urmează:

awk -F, '{print $ 3}' tab1.txt> output1.txt

Aceasta va selecta elementul din coloana 3 a fiecărei linii dacă coloanele sunt considerate separate de virgulă. Prin urmare, producția, în acest caz, ar fi:

Titlul 545 Titlul 723 Titlul 610 Titlul 118 Titlul 482 Titlul 335 Titlul 271 Titlul 373

Lista de afirmații din parantezele curbate ('{', '}') se numește bloc. Dacă ați pus o expresie condiționată în fața unui bloc, instrucțiunea din interiorul blocului va fi executată numai dacă condiția este adevărată.

awk '$ 7 == "\ $ 7,30" {print $ 3}' tab1.txt

În acest caz, condiția este $ 7 == "\ $ 7.30", ceea ce înseamnă că elementul din coloana 7 este egal cu 7,30 $. Reversul din fața semnalului dolarului este utilizat pentru a împiedica sistemul să interpreteze $ 7 ca variabilă și, în schimb, să ia semnul dolarului literal.

Deci, această afirmație awk imprimă elementul din coloana a treia a fiecărei linii care are o "7,30" în coloana 7.

Puteți folosi, de asemenea, expresii regulate ca condiție. De exemplu:

awk '/ 30 / {print $ 3}' tab1.txt

Șirul dintre cele două tăieturi ('/') este expresia regulată. În acest caz, este doar șirul "30." Aceasta înseamnă că dacă o linie conține șirul "30", sistemul imprimă elementul la a treia coloană a acelei linii. Rezultatul din exemplul de mai sus ar fi:

Timberlake, Gaga, Presley,

Dacă elementele de tabelă sunt numerele awk pot executa calcule pe ele ca în acest exemplu:

awk '{print ($ 2 * $ 3) + $ 7}'

Pe lângă variabilele care accesează elementele rândului curent ($ 1, $ 2, etc.) există variabila $ 0 care se referă la linia completă (linia) și variabila NF care se află la numărul de câmpuri.

De asemenea, puteți defini noi variabile ca în acest exemplu:

awk '{suma = 0; pentru (col = 1; col <= NF; col ++) suma + = $ col; sumă de imprimare; }“

Acest lucru calculează și tipărește suma tuturor elementelor din fiecare rând.

Awk declarațiile sunt adesea combinate cu comenzi sed .