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!