- Optično preberite datoteke, vrstico za vrstico.
- Vsako vrstico razdelite na polja / stolpce.
- Navedite vzorce in primerjajte vrstice datoteke s temi vzorci
- Izvedite različna dejanja na črtah, ki se ujemajo z danim vzorcem
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:
- Prvi stolpec vsebuje ime zaposlenih / učiteljev v šoli
- Drugi stolpec vsebuje predmet, ki ga zaposleni poučuje
- Tretji stolpec označuje, ali je zaposleni profesor ali docent
- V četrtem stolpcu je plača zaposlenega
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.txtPrimer:
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.txtPrimer:
Č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.txtPrimer:
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.txtZa tiskanje vrstic z znaki manj kot številko:
Dolžina $ awk '($ 0) < n' filename.txtKjer 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.txtPrimer:
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.txtOčitno lahko z naslednjim ukazom natisnete prazne vrstice:
$ awk 'NF < 0' sample_file.txtPrimer 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.