- Skenirajte datoteke, redak po redak.
- Podijelite svaki redak u polja / stupce.
- Navedite uzorke i usporedite crte datoteke s tim uzorcima
- Izvršite razne radnje na linijama koje odgovaraju zadanom uzorku
U ovom ćemo članku objasniti osnovnu upotrebu naredbe awk i kako se ona može koristiti za razdvajanje datoteke nizova. Primjere iz ovog članka izveli smo na sustavu Debian 10 Buster, ali oni se mogu lako preslikati na većinu Linux distribucija.
Uzorak datoteke koju ćemo koristiti
Uzorak datoteke nizova koju ćemo koristiti za demonstraciju upotrebe naredbe awk je sljedeći:
To označava svaki stupac datoteke uzorka:
- Prvi stupac sadrži ime zaposlenika / učitelja u školi
- Drugi stupac sadrži temu koju zaposlenik predaje
- Treći stupac označava je li zaposlenik profesor ili docent
- Četvrti stupac sadrži plaću zaposlenika
Primjer 1: Upotrijebite Awk za ispis svih redaka datoteke
Ispis svakog retka određene datoteke zadano je ponašanje naredbe awk. U sljedećoj sintaksi naredbe awk ne navodimo nijedan obrazac koji bi awk trebao ispisati, pa bi naredba trebala primijeniti akciju "ispis" na sve retke datoteke.
Sintaksa:
$ awk 'print' naziv datoteke.txtPrimjer:
U ovom primjeru poručujem naredbi awk da ispisuje sadržaj moje datoteke s uzorkom, redak po redak.
$ awk 'print' sample_file.txt
Primjer 2: Upotrijebite awk za ispis samo linija koje odgovaraju zadanom uzorku
Uz awk možete odrediti uzorak i naredba će ispisati samo linije koje odgovaraju tom uzorku.
Sintaksa:
$ awk '/ pattern_to_be_matched / print' naziv datoteke.txtPrimjer:
Iz datoteke uzorka, ako želim ispisati samo retke koji sadrže varijablu 'B', mogu upotrijebiti sljedeću naredbu:
$ awk '/ B / print' sample_file.txt
Da primjer bude smisleniji, dopustite mi da ispišem samo podatke o zaposlenicima koji su 'profesorski'.
$ awk '/ professor / print' sample_file.txt
Naredba ispisuje samo retke / unose koji sadrže niz "profesor", tako da imamo vrijednije informacije izvedene iz podataka.
Primjer 3. Upotrijebite awk za razdvajanje datoteke tako da se ispisuju samo određena polja / stupci
Umjesto ispisa cijele datoteke, možete napraviti awk za ispis samo određenih stupaca datoteke. Awk prema zadanim postavkama tretira sve riječi odvojene razmakom u retku kao zapis stupca. Popis pohranjuje u varijablu od $ N. Gdje $ 1 predstavlja prvu riječ, $ 2 pohranjuje drugu riječ, $ 3 četvrtu, i tako dalje. $ 0 pohranjuje cijeli redak tako da se ispisuje tko redak, kao što je objašnjeno u primjeru 1.
Sintaksa:
$ awk 'ispiši $ N,… .' naziv datoteke.txtPrimjer:
Sljedeća naredba ispisat će samo prvi stupac (ime) i drugi stupac (predmet) moje datoteke uzorka:
$ awk 'print $ 1, $ 2' sample_file.txt
Primjer 4: Upotrijebite Awk za brojanje i ispis broja redaka u kojima se podudara uzorak
Možete reći awk-u da prebroji broj linija u kojima se podudara određeni obrazac, a zatim izbaci taj 'count'.
Sintaksa:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'naziv datoteke.txt
Primjer:
U ovom primjeru želim izbrojiti broj osoba koje predaju predmet "engleski". Stoga ću reći naredbi awk da odgovara uzorku "engleski" i ispisati broj redaka u kojima se ovaj obrazac podudara.
$ awk '/ engleski / ++ cnt END print "Count =", cnt' sample_file.txt
Brojanje ovdje sugerira da dvoje ljudi predaje engleski jezik iz uzoraka datoteka.
Primjer 5: Upotrijebite awk za ispis samo redaka s više od određenog broja znakova
Za ovaj ćemo zadatak koristiti ugrađenu funkciju awk koja se naziva "dužina". Ova funkcija vraća duljinu ulaznog niza. Stoga, ako želimo da awk ispisuje samo retke s brojem znakova većim ili čak manjim od broja, možemo koristiti funkciju dužine na sljedeći način:
Za ispis redaka s znakovima većim od broja:
$ awk 'length ($ 0)> n' naziv datoteke.txtZa ispis redaka sa znakovima manjim od broja:
$ awk 'dužina ($ 0) < n' filename.txtGdje je n broj znakova koje želite odrediti za redak.
Primjer:
Sljedeća naredba ispisat će samo retke iz moje datoteke uzorka koji imaju znakove veće od 30:
$ awk 'length ($ 0)> 30' sample_file.txt
Primjer 6: Upotrijebite awk za spremanje rezultata naredbe u drugu datoteku
Korištenjem operatora preusmjeravanja '>' možete upotrijebiti naredbu awk za ispis njegovih rezultata u drugu datoteku. Ovo je način na koji ga možete koristiti:
$ awk 'kriterij_za_print "naziv datoteke.txt> izlazna datoteka.txtPrimjer:
U ovom primjeru koristit ću operater preusmjeravanja sa svojom naredbom awk za ispis samo imena zaposlenika (stupac 1) u novu datoteku:
$ awk 'print $ 1' sample_file.txt> imena_zaposlenika.txt
Kroz naredbe mačke provjerio sam da nova datoteka sadrži samo imena zaposlenika.
Primjer 7: Upotrijebite awk za ispis samo nepraznih redaka iz datoteke
Awk ima neke ugrađene naredbe pomoću kojih možete filtrirati izlaz. Na primjer, naredba NF koristi se za zadržavanje broja polja unutar trenutnog ulaznog zapisa. Ovdje ćemo upotrijebiti naredbu NF za ispis samo praznih redaka datoteke:
$ awk 'NF> 0' sample_file.txtOčito možete koristiti sljedeću naredbu za ispis praznih redaka:
$ awk 'NF < 0' sample_file.txtPrimjer 8: Upotrijebite awk za brojanje ukupnih redaka u datoteci
Druga ugrađena funkcija koja se naziva NR čuva broj ulaznih zapisa (obično redaka) dane datoteke. Ovu funkciju u awk možete koristiti na sljedeći način za brojanje broja redaka u datoteci:
$ awk 'END print NR' sample_file.txt
Ovo su bile osnovne informacije koje su vam potrebne da biste započeli dijeljenjem datoteka naredbom awk. Možete upotrijebiti kombinaciju ovih primjera za dohvaćanje značajnijih informacija iz datoteke nizova kroz awk.