- Scanați fișierele, rând cu rând.
- Împarte fiecare linie în câmpuri / coloane.
- Specificați modele și comparați liniile fișierului cu aceste modele
- Efectuați diverse acțiuni pe liniile care se potrivesc cu un model dat
În acest articol, vom explica utilizarea de bază a comenzii awk și cum poate fi utilizată pentru a împărți un fișier de șiruri. Am realizat exemplele din acest articol pe un sistem Debian 10 Buster, dar acestea pot fi reproduse cu ușurință pe majoritatea distribuțiilor Linux.
Fișierul eșantion pe care îl vom folosi
Fișierul eșantion de șiruri pe care îl vom folosi pentru a demonstra utilizarea comenzii awk este după cum urmează:
Iată ce indică fiecare coloană a fișierului eșantion:
- Prima coloană conține numele angajaților / cadrelor didactice dintr-o școală
- Cea de-a doua coloană conține subiectul pe care îl predă angajatul
- Cea de-a treia coloană indică dacă angajatul este profesor sau profesor asistent
- Cea de-a patra coloană conține plata angajatului
Exemplul 1: Utilizați Awk pentru a imprima toate liniile unui fișier
Imprimarea fiecărei linii a unui fișier specificat este comportamentul implicit al comenzii awk. În următoarea sintaxă a comenzii awk, nu specificăm niciun model pe care awk ar trebui să îl tipărească, astfel comanda ar trebui să aplice acțiunea „print” la toate liniile fișierului.
Sintaxă:
$ awk 'print' nume de fișier.txtExemplu:
În acest exemplu, îi spun comenzii awk să imprime conținutul fișierului eșantion, linie cu linie.
$ awk 'print' sample_file.txt
Exemplul 2: Utilizați awk pentru a imprima numai liniile care se potrivesc cu un model dat
Cu awk, puteți specifica un model și comanda va imprima doar liniile care se potrivesc cu acel model.
Sintaxă:
$ awk '/ pattern_to_be_matched / print' nume de fișier.txtExemplu:
Din fișierul eșantion, dacă doresc să tipăresc doar linia (rândurile) care conțin variabila „B”, pot folosi următoarea comandă:
$ awk '/ B / print' sample_file.txt
Pentru a face exemplul mai semnificativ, permiteți-mi să imprim doar informațiile despre angajații care sunt „profesori”.
$ awk '/ professor / print' sample_file.txt
Comanda tipărește doar liniile / intrările care conțin șirul „profesor”, astfel avem informații mai valoroase derivate din date.
Exemplul 3. Utilizați awk pentru a împărți fișierul astfel încât să fie imprimate doar câmpuri / coloane specifice
În loc să tipăriți întregul fișier, puteți face awk pentru a imprima doar coloane specifice ale fișierului. Awk tratează toate cuvintele, separate prin spațiu alb, într-o linie ca o înregistrare de coloană în mod implicit. Stochează înregistrarea într-o variabilă de $ N. În cazul în care 1 $ reprezintă primul cuvânt, 2 $ stochează al doilea cuvânt, 3 $ al patrulea și așa mai departe. $ 0 stochează întreaga linie, astfel încât linia cine este tipărită, așa cum se explică în exemplul 1.
Sintaxă:
$ awk 'print $ N, .. .' nume de fișier.txtExemplu:
Următoarea comandă va imprima numai prima coloană (nume) și a doua coloană (subiect) din fișierul eșantion:
$ awk 'print $ 1, $ 2' sample_file.txt
Exemplul 4: Utilizați Awk pentru a număra și a imprima numărul de linii în care se potrivește un model
Puteți spune lui awk să numere numărul de linii în care este asociat un model specificat și apoi să scoată acel „număr”.
Sintaxă:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'nume de fișier.txt
Exemplu:
În acest exemplu, vreau să număr numărul de persoane care predau materia „engleză”. Prin urmare, voi spune comenzii awk să se potrivească cu modelul „engleză” și să tipăresc numărul de linii în care acest model este potrivit.
$ awk '/ english / ++ cnt END print "Count =", cnt' sample_file.txt
Numărul de aici sugerează că 2 persoane predă limba engleză din fișierele eșantionului.
Exemplul 5: Utilizați awk pentru a imprima numai linii cu mai mult de un anumit număr de caractere
Pentru această sarcină, vom folosi funcția awk încorporată numită „lungime”. Această funcție returnează lungimea șirului de intrare. Astfel, dacă dorim ca awk să imprime numai linii cu mai mult sau chiar mai puțin decât numărul de caractere, putem folosi funcția de lungime în modul următor:
Pentru imprimarea liniilor cu caractere mai mari decât un număr:
$ awk 'length ($ 0)> n' nume de fișier.txtPentru imprimarea liniilor cu caractere mai mici decât un număr:
$ awk 'length ($ 0) < n' filename.txtUnde n este numărul de caractere pe care doriți să îl specificați pentru o linie.
Exemplu:
Următoarea comandă va imprima numai liniile din fișierul eșantion care au caractere mai mari de 30:
$ awk 'length ($ 0)> 30' sample_file.txt
Exemplul 6: Utilizați awk pentru a salva ieșirea comenzii într-un alt fișier
Utilizând operatorul de redirecționare '>', puteți utiliza comanda awk pentru a imprima ieșirea acestuia într-un alt fișier. Acesta este modul în care îl puteți folosi:
$ awk 'criteria_to_print "nume de fișier.txt> outputfile.txtExemplu:
În acest exemplu, voi folosi operatorul de redirecționare cu comanda mea awk pentru a imprima doar numele angajaților (coloana 1) într-un fișier nou:
$ awk 'print $ 1' sample_file.txt> nume_angajat.txt
Am verificat prin comenzile cat că noul fișier conține doar numele angajaților.
Exemplul 7: Utilizați awk pentru a imprima numai liniile ne-goale dintr-un fișier
Awk are câteva comenzi încorporate pe care le puteți utiliza pentru a filtra ieșirea. De exemplu, comanda NF este utilizată pentru a ține un număr al câmpurilor din înregistrarea de intrare curentă. Aici vom folosi comanda NF pentru a imprima numai liniile ne-goale ale fișierului:
$ awk 'NF> 0' sample_file.txtEvident, puteți utiliza următoarea comandă pentru a imprima liniile goale:
$ awk 'NF < 0' sample_file.txtExemplul 8: Utilizați awk pentru a număra liniile totale dintr-un fișier
O altă funcție încorporată numită NR ține un număr al înregistrărilor de intrare (de obicei linii) ale unui fișier dat. Puteți utiliza această funcție în awk după cum urmează pentru a număra numărul de linii dintr-un fișier:
$ awk 'END print NR' sample_file.txt
Aceasta a fost informația de bază de care aveți nevoie pentru a începe cu împărțirea fișierelor cu comanda awk. Puteți utiliza combinația acestor exemple pentru a prelua informații mai semnificative din fișierul dvs. de șiruri prin awk.