Awk

Cum se folosește AWK pe Linux

Cum se folosește AWK pe Linux

Utilitățile oferite de Linux urmează adesea filosofia UNIX de proiectare. Orice instrument ar trebui să fie mic, să utilizeze text simplu pentru I / O și să funcționeze într-un mod modular. Datorită moștenirii, avem unele dintre cele mai bune funcționalități de procesare a textului cu ajutorul unor instrumente precum sed și awk.

În Linux, instrumentul awk este preinstalat pe toate distribuțiile Linux. AWK în sine este un limbaj de programare. Instrumentul AWK este doar un interpret al limbajului de programare AWK. În acest ghid, verificați cum să utilizați AWK pe Linux.

Utilizarea AWK

Instrumentul AWK este cel mai util atunci când textele sunt organizate într-un format previzibil. Este destul de bun la analizarea și manipularea datelor tabulare. Funcționează linie cu linie, pe întregul fișier text.

Comportamentul implicit al awk este acela de a utiliza spații albe (spații, file etc.) pentru separarea câmpurilor. Din fericire, multe dintre fișierele de configurare de pe Linux urmează acest model.

Sintaxa de bază

Așa arată structura de comandă a awk.

$ awk '// ; ; '

Porțiunile comenzii sunt destul de auto-explicative. Awk poate funcționa fără porțiunea de căutare sau acțiune. Dacă nu este specificat nimic, atunci acțiunea implicită pe meci va fi doar imprimarea. Practic, awk va imprima toate potrivirile găsite în fișier.

Dacă nu este specificat niciun model de căutare, atunci awk va efectua acțiunile specificate pe fiecare linie a fișierului.

Dacă sunt date ambele porțiuni, atunci awk va folosi modelul pentru a determina dacă linia curentă îl reflectă. Dacă este potrivită, atunci awk efectuează acțiunea specificată.

Rețineți că awk poate funcționa și pe textele redirecționate. Acest lucru poate fi realizat prin canalizarea conținutului comenzii pe care să-l awk pentru a acționa. Aflați mai multe despre comanda de țeavă Linux.

În scopuri demonstrative, iată un exemplu de fișier text. Conține 10 rânduri, 2 cuvinte pe rând.

$ proba de pisica.txt

Expresie uzuala

Una dintre caracteristicile cheie care fac din awk un instrument puternic este suportul expresiei regulate (regex, pe scurt). O expresie regulată este un șir care reprezintă un anumit tipar de caractere.

Iată o listă cu unele dintre cele mai frecvente sintaxe ale expresiilor regulate. Aceste sintaxe regex nu sunt doar unice pentru awk. Acestea sunt sintaxe regex aproape universale, astfel încât stăpânirea lor va ajuta și în alte aplicații / programare care implică expresie regulată.

  • Personaje de bază: Toate caracterele alfanumerice subliniază (_) etc.
    • Set de caractere: pentru a ușura lucrurile, există grupuri de caractere în regex. De exemplu, majuscule (A-Z), minuscule (a-z) și cifre numerice (0-9).
  • Meta-caractere: Acestea sunt personaje care explică diferite moduri de a extinde caracterele obișnuite.
    • Perioada (.): Orice potrivire de caractere din poziție este validă (cu excepția unei linii noi).
    • Asterisc (*): Zero sau mai multe existențe ale caracterului imediat care o precedă sunt valabile.
    • Suport ([]): Potrivirea este valabilă dacă, la poziție, se potrivesc oricare dintre caracterele din paranteză. Poate fi combinat cu seturi de caractere.
    • Caret (^): Meciul va trebui să fie la începutul liniei.
    • Dolar ($): Meciul va trebui să fie la sfârșitul liniei.
    • Bară inversă (\): Dacă orice meta-caracter trebuie folosit în sens literal.

Tipărirea textului

Pentru a imprima tot conținutul unui fișier text, utilizați comanda print. În cazul modelului de căutare, nu există niciun model definit. Deci, awk imprimă toate liniile.

$ awk 'print' eșantion.txt

Aici, „print” este o comandă AWK care tipărește conținutul intrării.

Căutare de șiruri

AWK poate efectua o căutare de bază a textului pe textul dat. În secțiunea model, trebuie să fie textul de găsit.

În următoarea comandă, awk va căuta textul „rapid” pe toate liniile eșantionului de fișiere.txt.

$ awk '/ quick /' sample.txt

Acum, să folosim câteva expresii regulate pentru a regla mai bine căutarea. Următoarea comandă va imprima toate liniile care au „maro” la început.

$ awk '/ ^ brown /' eșantion.txt

Ce zici de a găsi ceva la sfârșitul unei linii? Următoarea comandă va imprima toate liniile care au „rapid” la sfârșit.

$ awk '/ quick $ /' eșantion.txt

Model de wild card

Următorul exemplu va prezenta prezentarea utilizării cursorului (.). Aici, pot exista două caractere înainte de caracterul „e”.

$ awk '/ ... e /' eșantion.txt

Model tip wild card (folosind asterisc)

Ce se întâmplă dacă poate exista un număr de caractere în locație? Pentru a se potrivi cu orice caracter posibil din poziție, utilizați asteriscul (*). Aici, AWK va potrivi toate liniile care au orice cantitate de caractere după „.

$ awk '/ eșantionul * /'.txt

Expresia parantezei

Următorul exemplu va prezenta cum să utilizați expresia paranteză. Expresia paranteză spune că la locație, potrivirea va fi valabilă dacă se potrivește cu setul de caractere cuprinse de paranteze. De exemplu, următoarea comandă se va potrivi cu „The” și „Tee” ca potriviri valide.

$ awk '/ T [he] e /' eșantion.txt

Există câteva seturi de caractere predefinite în expresia regulată. De exemplu, setul tuturor literelor majuscule este etichetat ca „A-Z”. În următoarea comandă, awk se va potrivi cu toate cuvintele care conțin o literă mare.

$ awk '/ [A-Z] /' eșantion.txt

Aruncați o privire la următoarea utilizare a seturilor de caractere cu expresia paranteză.

  • [0-9]: indică o singură cifră
  • [a-z]: indică o singură literă mică
  • [A-Z]: indică o singură literă mare
  • [a-zA-z]: indică o singură literă
  • [a-zA-z 0-9]: indică un singur caracter sau cifră.

Awk variabile predefinite

AWK vine cu o grămadă de variabile predefinite și automate. Aceste variabile pot facilita scrierea de programe și scripturi cu AWK.

Iată câteva dintre cele mai comune variabile AWK pe care le veți întâlni.

  • NUME DE FIȘIER: Numele fișierului fișierului de intrare curent.
  • RS: Separatorul de înregistrări. Datorită naturii AWK, procesează datele câte o înregistrare la un moment dat. Aici, această variabilă specifică delimitatorul utilizat pentru împărțirea fluxului de date în înregistrări. În mod implicit, această valoare este caracterul liniei noi.
  • NR: Numărul curent de înregistrare de intrare. Dacă valoarea RS este setată la implicit, atunci această valoare va indica numărul curent al liniei de intrare.
  • FS / OFS: Caracterul (caracterele) utilizat (e) ca separator de câmp. Odată citit, AWK împarte o înregistrare în diferite câmpuri. Delimitatorul este definit de valoarea FS. La tipărire, AWK se alătură tuturor câmpurilor. Cu toate acestea, în acest moment, AWK folosește separatorul OFS în loc de separatorul FS. În general, atât FS, cât și OFS sunt aceleași, dar nu sunt obligatorii.
  • NF: Numărul de câmpuri din înregistrarea curentă. Dacă se utilizează valoarea implicită „spațiu alb”, atunci se va potrivi cu numărul de cuvinte din înregistrarea curentă.
  • ORS: Separatorul de înregistrări pentru datele de ieșire. Valoarea implicită este caracterul newline.

Să le verificăm în acțiune. Următoarea comandă va utiliza variabila NR pentru a imprima linia 2 până la linia 4 din eșantion.txt. AWK suportă, de asemenea, operatori logici cum ar fi logic și (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Pentru a atribui o anumită valoare unei variabile AWK, utilizați următoarea structură.

$ awk '// ; ; ' =,

De exemplu, pentru a elimina toate liniile goale din fișierul de intrare, schimbați valoarea RS la practic nimic. Este un truc care folosește o regulă obscură POSIX. Specifică faptul că dacă valoarea RS este un șir gol, atunci înregistrările sunt separate printr-o secvență care constă dintr-o linie nouă cu una sau mai multe linii goale. În POSIX, o linie goală fără conținut este complet goală. Cu toate acestea, dacă linia conține spații albe, atunci nu este considerată „goală”.

$ awk 'print' RS = "eșantion.txt

Resurse aditionale

AWK este un instrument puternic cu multe funcții. În timp ce acest ghid acoperă o mulțime dintre ele, este încă doar elementele de bază. Stăpânirea AWK va necesita mai mult decât acest lucru. Acest ghid ar trebui să fie o introducere frumoasă a instrumentului.

Dacă chiar doriți să stăpâniți instrumentul, atunci iată câteva resurse suplimentare pe care ar trebui să le verificați.

  • Tăiați spațiul alb
  • Folosind o declarație condiționată
  • Imprimați o gamă de coloane
  • Regex cu AWK
  • 20 de exemple AWK

Internetul este un loc destul de bun pentru a învăța ceva. Există o mulțime de tutoriale minunate despre elementele de bază AWK pentru utilizatorii foarte avansați.

Gândul final

Sperăm că acest ghid a contribuit la o bună înțelegere a elementelor de bază AWK. Deși poate dura ceva timp, stăpânirea AWK este extrem de satisfăcătoare în ceea ce privește puterea pe care o acordă.

Calcul fericit!

How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...
Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...