Awk

Kako razdeliti datoteko nizov z Awk

Kako razdeliti datoteko nizov z Awk
Ukaz Linux awk (okrajšan od imen razvijalcev; Aho, Weinberger in Kernighan) je odličen način za obdelavo in analizo datoteke nizov. Da bi bile datoteke bolj informativne, jih je treba organizirati v obliki vrstic in stolpcev. Nato lahko s temi datotekami uporabite awk za:

V tem članku bomo razložili osnovno uporabo ukaza awk in kako ga lahko uporabimo za razdelitev datoteke nizov. Primere iz tega članka smo izvedli na sistemu Debian 10 Buster, vendar jih je mogoče enostavno ponoviti na večini distribucij Linuxa.

Vzorčna datoteka, ki jo bomo uporabili

Vzorčna datoteka nizov, ki jo bomo uporabili za predstavitev uporabe ukaza awk, je naslednja:

To kaže vsak stolpec vzorčne datoteke:

Primer 1: Uporabite Awk za tiskanje vseh vrstic datoteke

Tiskanje vseh vrstic določene datoteke je privzeto vedenje ukaza awk. V naslednji sintaksi ukaza awk ne podajamo nobenega vzorca, ki bi ga moral awk natisniti, zato naj bi ukaz uporabil dejanje »tiskanje« v vseh vrsticah datoteke.

Sintaksa:

$ awk 'print' ime datoteke.txt

Primer:

V tem primeru sporočam ukazu awk, naj vrstico za vrstico natisne vsebino vzorčne datoteke.

$ awk 'print' sample_file.txt

2. primer: Uporabite awk za tiskanje samo vrstic, ki se ujemajo z danim vzorcem

Z awk lahko določite vzorec in ukaz bo natisnil samo vrstice, ki se ujemajo s tem vzorcem.

Sintaksa:

$ awk '/ pattern_to_be_matched / print' ime datoteke.txt

Primer:

Če želim iz vzorčne datoteke natisniti samo vrstice, ki vsebujejo spremenljivko 'B', lahko uporabim naslednji ukaz:

$ awk '/ B / print' sample_file.txt

Da bo primer bolj smiseln, naj natisnem samo podatke o zaposlenih, ki so "profesorjevi".

$ awk '/ professor / print' sample_file.txt

Ukaz natisne samo vrstice / vnose, ki vsebujejo niz »profesor«, zato imamo iz podatkov bolj dragocene informacije.

3. primer. Z datoteko awk datoteko razdelite tako, da se natisnejo samo določena polja / stolpci

Namesto tiskanja celotne datoteke lahko naredite awk za tiskanje samo določenih stolpcev datoteke. Awk privzeto obravnava vse besede, ločene s presledkom, v vrstici kot zapis stolpca. Zapis shrani v spremenljivko $ N. Kjer 1 $ predstavlja prvo besedo, 2 $ shrani drugo besedo, 3 $ četrto itd. $ 0 shrani celo vrstico, tako da je natisnjena vrstica kdo, kot je razloženo v primeru 1.

Sintaksa:

$ awk 'natisni $ N,… .' Ime datoteke.txt

Primer:

Naslednji ukaz bo natisnil samo prvi stolpec (ime) in drugi stolpec (zadeva) moje vzorčne datoteke:

$ awk 'print $ 1, $ 2' sample_file.txt

4. primer: Uporabite Awk za štetje in tiskanje števila vrstic, v katerih se ujema vzorec

Awk lahko poveste, naj prešteje število vrstic, v katerih se ujema določen vzorec, in nato izpiše to 'count'.

Sintaksa:

$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'
Ime datoteke.txt

Primer:

V tem primeru želim prešteti število oseb, ki poučujejo predmet "angleščina". Zato bom ukazu awk rekel, naj se ujema z vzorcem "angleški" in natisnil število vrstic, v katerih se ta vzorec ujema.

$ awk '/ angleščina / ++ cnt END print "Count =", cnt' sample_file.txt

Štetje tukaj kaže, da dve osebi poučujeta angleščino iz vzorčnih zapisov datotek.

Primer 5: Uporabite awk za tiskanje samo vrstic z več kot določenim številom znakov

Za to nalogo bomo uporabili vgrajeno funkcijo awk, imenovano "dolžina". Ta funkcija vrne dolžino vhodnega niza. Če želimo torej, da awk natisne samo vrstice z več ali celo manj kot številom znakov, lahko funkcijo dolžine uporabimo na naslednji način:

Za tiskanje vrstic z znaki, večjimi od števila:

$ awk 'length ($ 0)> n' ime datoteke.txt

Za tiskanje vrstic z znaki manj kot številko:

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

Kjer je n število znakov, ki jih želite določiti za vrstico.

Primer:

Naslednji ukaz bo natisnil samo vrstice iz vzorčne datoteke z znaki več kot 30:

$ awk 'dolžina ($ 0)> 30' sample_file.txt

Primer 6: Uporabite awk, da shranite izhod ukaza v drugo datoteko

Z uporabo operaterja preusmeritve '>' lahko z ukazom awk natisnete izhodne podatke v drugo datoteko. Tako ga lahko uporabite:

$ awk 'criteria_to_print "ime datoteke.txt> izhodna datoteka.txt

Primer:

V tem primeru bom z ukazom awk z operaterjem preusmeritve natisnil samo imena zaposlenih (stolpec 1) v novo datoteko:

$ awk 'print $ 1' sample_file.txt> imena_zaposlenih.txt

Preko mačjih ukazov sem preveril, da nova datoteka vsebuje samo imena zaposlenih.

7. primer: Uporabite awk za tiskanje samo praznih vrstic iz datoteke

Awk ima nekaj vgrajenih ukazov, s katerimi lahko filtrirate izhod. Ukaz NF se na primer uporablja za vodenje števila polj v trenutnem vhodnem zapisu. Tu bomo z ukazom NF natisnili samo prazne vrstice datoteke:

$ awk 'NF> 0' sample_file.txt

Očitno lahko z naslednjim ukazom natisnete prazne vrstice:

$ awk 'NF < 0' sample_file.txt

Primer 8: Uporabite awk za štetje celotnih vrstic v datoteki

Druga vgrajena funkcija, imenovana NR, vodi štetje števila vhodnih zapisov (običajno vrstic) dane datoteke. To funkcijo lahko uporabite v awk, kot sledi, za štetje števila vrstic v datoteki:

$ awk 'END print NR' sample_file.txt

To so bile osnovne informacije, ki jih potrebujete za začetek delitve datotek z ukazom awk. Kombinacijo teh primerov lahko uporabite za pridobivanje pomembnejših informacij iz vaše datoteke nizov prek awk.

Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...
0 A.D. Vadnica
Od številnih strateških iger tam 0 A.D. uspe izstopati kot izčrpen naslov in zelo globoka, taktična igra, čeprav je odprtokodna. Razvoj igre deluje ze...
Vadnica za Unity3D
Uvod v Unity 3D Unity 3D je močan motor za razvoj iger. Navzkrižna platforma vam omogoča ustvarjanje iger za mobilne naprave, splet, namizje in konzol...