Awk

Kako podijeliti datoteku žica pomoću Awka

Kako podijeliti datoteku žica pomoću Awka
Naredba Linux awk (skraćeno od imena programera; Aho, Weinberger i Kernighan) izvrstan je način za obradu i analizu datoteke nizova. Da bi datoteke bile informativnije, moraju biti organizirane u obliku redaka i stupaca. Zatim možete koristiti awk na ovim datotekama za:

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:

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

Primjer:

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

Primjer:

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

Primjer:

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

Za ispis redaka sa znakovima manjim od broja:

$ awk 'dužina ($ 0) < n' filename.txt

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

Primjer:

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

Očito možete koristiti sljedeću naredbu za ispis praznih redaka:

$ awk 'NF < 0' sample_file.txt

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

Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...
Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...