Awk

Cum se împarte un fișier de șiruri cu Awk

Cum se împarte un fișier de șiruri cu Awk
Comanda Linux awk (prescurtată de la numele dezvoltatorilor; Aho, Weinberger și Kernighan) este o modalitate excelentă de a procesa și analiza un fișier de șiruri. Pentru ca fișierele să fie mai informative, acestea trebuie organizate sub formă de rânduri și coloane. Apoi, puteți utiliza awk pe aceste fișiere pentru:

Î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:

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.txt

Exemplu:

Î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.txt

Exemplu:

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.txt

Exemplu:

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.txt

Pentru imprimarea liniilor cu caractere mai mici decât un număr:

$ awk 'length ($ 0) < n' filename.txt

Unde 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.txt

Exemplu:

Î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.txt

Evident, puteți utiliza următoarea comandă pentru a imprima liniile goale:

$ awk 'NF < 0' sample_file.txt

Exemplul 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.

Cum se instalează League Of Legends pe Ubuntu 14.04
Dacă ești fan al League of Legends, atunci aceasta este o oportunitate pentru tine de a testa rula League of Legends. Rețineți că LOL este acceptat pe...
Instalați cel mai recent joc de strategie OpenRA pe Ubuntu Linux
OpenRA este un motor de jocuri de strategie în timp real Libre / Free care recreează primele jocuri Westwood, cum ar fi clasicul Command & Conquer: Re...
Instalați cel mai recent Dolphin Emulator pentru Gamecube și Wii pe Linux
Emulatorul Dolphin vă permite să jucați jocurile alese de Gamecube și Wii pe computerele personale Linux (PC). Fiind un emulator de joc liber disponi...