Skip to main content

Cum se scrie AWK comenzi și scripturi

Farming Simulator 17: The life of a famer RAW (Aprilie 2025)

Farming Simulator 17: The life of a famer RAW (Aprilie 2025)
Anonim

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.

Simplu awk comenzile 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, Preț $ 7.302, Taylor Swift, titlul 723, prețul de 7.90 dolari3, Mick Jagger, Titlul 610, Pret $ 7.904, Lady Gaga, Titlul 118, Preț $ 7.305, Johnny Cash, Titlu 482, Preț $ 6.506, Elvis Presley, titlu 335, prețul 7,30 dolari7, John Lennon, Titlu 271, Preț $ 7.908, Michael Jackson, Titlul 373, Preț $ 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.