Awk

Kako koristiti AWK na Linuxu

Kako koristiti AWK na Linuxu

Uslužni programi koje Linux nudi često slijede UNIX-ovu filozofiju dizajna. Bilo koji alat trebao bi biti mali, upotrebljavati običan tekst za I / O i raditi modularno. Zahvaljujući naslijeđu, imamo neke od najboljih funkcija za obradu teksta uz pomoć alata poput sed i awk.

U Linuxu, awk alat dolazi unaprijed instaliran na svim Linux distribucijama. AWK je sam po sebi programski jezik. Alat AWK samo je tumač programskog jezika AWK. U ovom vodiču provjerite kako koristiti AWK na Linuxu.

AWK upotreba

Alat AWK najkorisniji je kada su tekstovi organizirani u predvidljivom formatu. Prilično je dobro raščlaniti i manipulirati tabličnim podacima. Djeluje redom po liniji, na cijeloj tekstualnoj datoteci.

Zadano ponašanje awk-a je korištenje razmaka (razmaci, kartice, itd.) za odvajanje polja. Srećom, mnoge konfiguracijske datoteke na Linuxu slijede ovaj obrazac.

Osnovna sintaksa

Ovako izgleda naredbena struktura awka.

$ awk '// ; ; '

Dijelovi naredbe sasvim su razumljivi. Awk može raditi bez dijela pretraživanja ili radnje. Ako ništa nije navedeno, zadana radnja na podudaranju bit će samo ispis. U osnovi, awk će ispisati sve podudarnosti pronađene u datoteci.

Ako nije naveden obrazac pretraživanja, tada će awk izvršiti navedene radnje u svakom pojedinom retku datoteke.

Ako su dana oba dijela, tada će awk upotrijebiti obrazac da utvrdi odražava li ga trenutna linija. Ako se podudara, awk izvršava navedenu radnju.

Imajte na umu da awk može raditi i na preusmjerenim tekstovima. To se može postići prenošenjem sadržaja naredbe na koju će awk djelovati. Saznajte više o naredbi Linux pipe.

U demo svrhe, evo primjera tekstualne datoteke. Sadrži 10 redaka, po 2 riječi u retku.

$ mačka uzorak.txt

Regularni izraz

Jedna od ključnih značajki koje awk čine moćnim alatom je podrška regularnom izrazu (skraćeno regex). Regularni izraz je niz koji predstavlja određeni obrazac znakova.

Evo popisa nekih od najčešćih sintaksa regularnih izraza. Te sintakse regularnih izraza nisu jedinstvene samo za awk. To su gotovo univerzalne sintakse regularnih izraza, pa će njihovo savladavanje također pomoći u drugim aplikacijama / programiranju koje uključuje regularni izraz.

  • Osnovni likovi: Svi alfanumerički znakovi podvlače (_) itd.
    • Skup znakova: Da bi se stvari olakšale, u regexu postoje grupe znakova. Na primjer, velika (A-Z), mala (a-z) i brojčane znamenke (0-9).
  • Meta-likovi: To su likovi koji objašnjavaju razne načine za proširivanje običnih znakova.
    • Razdoblje (.): Bilo koje podudaranje znakova na položaju je važeće (osim novog retka).
    • Zvjezdica (*): Vrijedi nula ili više postojanja neposrednog znaka koji joj prethodi.
    • Zagrada ([]): Podudaranje je važeće ako se na poziciji podudara bilo koji od znakova iz zagrade. Može se kombinirati sa skupovima znakova.
    • Caret (^): Utakmica će morati biti na početku retka.
    • Dolar ($): Utakmica će morati biti na kraju retka.
    • Povratna crta (\): Ako se bilo koji meta-znak mora upotrijebiti u doslovnom smislu.

Ispis teksta

Da biste ispisali sav sadržaj tekstualne datoteke, upotrijebite naredbu print. U slučaju uzorka pretraživanja, obrazac nije definiran. Dakle, awk ispisuje sve linije.

Uzorak $ awk 'print'.txt

Ovdje je "ispis" naredba AWK koja ispisuje sadržaj unosa.

Pretraživanje niza

AWK može izvršiti osnovno pretraživanje teksta na zadanom tekstu. U odjeljku uzorka to mora biti tekst koji treba pronaći.

U sljedećoj naredbi, awk će tražiti tekst "brzo" u svim redovima uzorka datoteke.txt.

$ awk '/ quick /' uzorak.txt

Sada, upotrijebimo neke regularne izraze za daljnju prilagodbu pretraživanja. Sljedeća naredba ispisat će sve retke koji na početku imaju "smeđu boju".

$ awk '/ ^ smeđi /' uzorak.txt

Kako bi bilo da nađete nešto na kraju retka? Sljedeća naredba ispisat će sve retke koji na kraju imaju "brzo".

$ awk '/ brzi $ /' uzorak.txt

Dizajn uzorka

Sljedeći će primjer prikazati upotrebu karata (.). Ovdje mogu biti bilo koja dva znaka prije znaka "e".

$ awk '/ ... e /' uzorak.txt

Uzorak zamjenskog znaka (pomoću zvjezdice)

Što ako na mjestu može biti bilo koji broj znakova? Da biste se podudarali s bilo kojim mogućim znakom na položaju, upotrijebite zvjezdicu (*). Ovdje će AWK odgovarati svim linijama koje imaju bilo koji broj znakova nakon "the".

$ awk '/ uzorak * /'.txt

Izraz zagrade

Sljedeći će primjer pokazati kako se koristi izraz zagrada. Izraz zagrada govori da će na mjestu podudaranje biti važeće ako se podudara sa skupom znakova zatvorenim zagradama. Na primjer, sljedeća naredba će odgovarati “The” i “Tee” kao valjana podudaranja.

$ awk '/ T [he] e /' uzorak.txt

U regularnom izrazu postoje neki unaprijed definirani skupovi znakova. Na primjer, skup svih velikih slova označen je kao "A-Z". U sljedećoj naredbi awk će odgovarati svim riječima koje sadrže veliko slovo.

$ awk '/ [A-Z] /' uzorak.txt

Pogledajte sljedeću upotrebu skupova znakova s ​​izrazom zagrada.

  • [0-9]: Označava jednoznamenkastu znamenku
  • [a-z]: Označava jedno malo slovo
  • [A-Z]: Označava jedno veliko slovo
  • [a-zA-z]: Označava jedno slovo
  • [a-zA-z 0-9]: Označava jedan znak ili znamenku.

Awk unaprijed definirane varijable

AWK dolazi s hrpom unaprijed definiranih i automatskih varijabli. Te varijable mogu olakšati pisanje programa i skripti s AWK-om.

Evo nekoliko najčešćih varijabli AWK na koje ćete naići.

  • NAZIV DATOTEKE: Naziv datoteke trenutne ulazne datoteke.
  • RS: Separator zapisa. Zbog prirode AWK obrađuje podatke jedan po jedan zapis. Ovdje ova varijabla navodi graničnik koji se koristi za razdvajanje toka podataka u zapise. Po zadanom je ova vrijednost znak novog reda.
  • NR: Trenutni broj ulaznog zapisa. Ako je vrijednost RS postavljena na zadane, tada će ta vrijednost označavati trenutni broj ulaznog retka.
  • FS / OFS: Znakovi koji se koriste kao odvajači polja. Jednom pročitan, AWK dijeli zapis na različita polja. Graničnik je definiran vrijednošću FS. Tijekom ispisa, AWK se ponovno pridružuje svim poljima. Međutim, u ovom trenutku AWK koristi OFS separator umjesto FS separatora. Općenito, i FS i OFS su isti, ali nisu obavezni da bi to bili.
  • NF: Broj polja u trenutnom zapisu. Ako se koristi zadana vrijednost "razmak", tada će odgovarati broju riječi u trenutnom zapisu.
  • ORS: Razdjelnik zapisa za izlazne podatke. Zadana vrijednost je znak novog retka.

Provjerimo ih na djelu. Sljedeća naredba će koristiti NR varijablu za ispis retka 2 do retka 4 iz uzorka.txt. AWK također podržava logičke operatore poput logičkog i (&&).

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

Da biste dodijelili određenu vrijednost varijabli AWK, upotrijebite sljedeću strukturu.

$ awk '// ; ; ' =,

Na primjer, da biste uklonili sve prazne retke iz ulazne datoteke, promijenite vrijednost RS-a u osnovi na ništa. To je trik koji koristi opskurno POSIX pravilo. Određuje da ako je vrijednost RS prazan niz, tada su zapisi odvojeni nizom koji se sastoji od novog retka s jednim ili više praznih redaka. U POSIX-u je prazan redak bez sadržaja potpuno prazan. Međutim, ako redak sadrži razmake, tada se ne smatra "praznim".

$ awk 'print' RS = "uzorak.txt

Dodatni resursi

AWK je moćan alat s mnoštvom značajki. Iako ovaj vodič pokriva puno njih, to su još uvijek samo osnove. Ovladavanje AWK-om trajat će i više od ovog. Ovaj vodič trebao bi biti lijep uvod u alat.

Ako stvarno želite svladati alat, evo nekoliko dodatnih resursa koje biste trebali pogledati.

  • Izrežite razmak
  • Koristeći uvjetnu izjavu
  • Ispišite niz stupaca
  • Regex s AWK
  • 20 primjera AWK

Internet je sasvim dobro mjesto za naučiti nešto. Postoji mnogo sjajnih vodiča o osnovama AWK-a za vrlo napredne korisnike.

Završna misao

Nadamo se da je ovaj vodič pomogao u dobrom razumijevanju osnova AWK-a. Iako može potrajati, svladavanje AWK-a izuzetno je korisno u smislu snage koju daje.

Sretno računanje!

Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...
Najpopularnije laboratorijske igre Oculus App
Ako ste vlasnik slušalica Oculus, tada morate biti sigurni u bočno učitavanje. Bočno učitavanje postupak je instaliranja nehranjenog sadržaja na vaše ...