Awk

Kako uporabljati AWK v Linuxu

Kako uporabljati AWK v Linuxu

Pripomočki, ki jih ponuja Linux, pogosto sledijo filozofiji oblikovanja UNIX. Vsako orodje mora biti majhno, uporabljati navadno besedilo za V / I in delovati modularno. Zahvaljujoč zapuščini imamo nekaj najboljših funkcij za obdelavo besedila s pomočjo orodij, kot sta sed in awk.

V Linuxu je orodje awk vnaprej nameščeno na vseh distribucijah Linuxa. AWK je sam programski jezik. Orodje AWK je le tolmač programskega jezika AWK. V tem priročniku si oglejte, kako uporabljati AWK v Linuxu.

Uporaba AWK

Orodje AWK je najbolj uporabno, če so besedila organizirana v predvidljivi obliki. Precej dobro razčlenjuje in manipulira tabelarne podatke. Deluje po vrsti za celotno besedilno datoteko.

Privzeto vedenje awka je uporaba presledkov (presledkov, zavihkov itd.) za ločevanje polj. Na srečo veliko konfiguracijskih datotek v Linuxu sledi temu vzorcu.

Osnovna sintaksa

Tako je videti ukazna struktura awk.

$ awk '// ; ; '

Deli ukaza so povsem samoumevni. Awk lahko deluje brez iskalnega ali akcijskega dela. Če nič ni določeno, bo privzeto dejanje na tekmi samo tiskanje. V bistvu bo awk natisnil vsa ujemanja v datoteki.

Če ni določen noben vzorec iskanja, bo awk izvedel navedena dejanja v vsaki posamezni vrstici datoteke.

Če sta podana oba dela, bo awk z vzorcem določil, ali ga trenutna vrstica odraža. Če se ujema, awk izvede določeno dejanje.

Upoštevajte, da awk lahko deluje tudi na preusmerjena besedila. To lahko dosežemo s cevovodom vsebine ukaza, s katerim awk deluje. Preberite več o ukazu Linux pipe.

Za predstavitvene namene je tukaj vzorčna besedilna datoteka. Vsebuje 10 vrstic, 2 besedi na vrstico.

$ mačji vzorec.txt

Vsakdanje izražanje

Ena ključnih funkcij, zaradi katerih je awk močno orodje, je podpora regularnemu izrazu (na kratko regularni izraz). Regularni izraz je niz, ki predstavlja določen vzorec znakov.

Tu je seznam nekaterih najpogostejših skladenj regularnih izrazov. Te sintakse regularnih izrazov niso edinstvene samo za awk. To so skoraj univerzalne sintakse regularnih izrazov, zato bo njihovo obvladovanje pomagalo tudi pri drugih aplikacijah / programiranju, ki vključuje regularni izraz.

  • Osnovni znaki: Vsi alfanumerični znaki so podčrtani (_) itd.
    • Nabor znakov: Za lažje stvari so v regularnem izrazu skupine znakov. Na primer, velike (A-Z), male (A-Z) in številčne številke (0-9).
  • Meta-znaki: To so znaki, ki razlagajo različne načine razširitve običajnih znakov.
    • Obdobje (.): Vsako ujemanje znakov v položaju je veljavno (razen nove vrstice).
    • Zvezdica (*): Velja nič ali več obstojev neposrednega znaka pred njim.
    • Nosilec ([]): Ujemanje je veljavno, če se na položaju ujema kateri koli znak iz oklepaja. Lahko se kombinira z nabori znakov.
    • Caret (^): Tekma bo morala biti na začetku vrstice.
    • Dolar ($): Tekma bo morala biti na koncu vrstice.
    • Povratna poševnica (\): Če je treba v dobesednem pomenu uporabiti kateri koli meta-znak.

Tiskanje besedila

Če želite natisniti vso vsebino besedilne datoteke, uporabite ukaz za tiskanje. V primeru iskalnega vzorca ni določen noben vzorec. Torej, awk natisne vse vrstice.

$ awk 'print' vzorec.txt

Tu je "print" ukaz AWK, ki natisne vsebino vnosa.

Iskanje nizov

AWK lahko izvede osnovno iskanje besedila v danem besedilu. V razdelku z vzorci mora biti besedilo, ki ga želite najti.

V naslednjem ukazu bo awk poiskal besedilo "hitro" v vseh vrsticah vzorca datoteke.txt.

$ awk '/ quick /' vzorec.txt

Zdaj pa uporabimo nekaj regularnih izrazov za nadaljnje natančno iskanje. Naslednji ukaz bo natisnil vse vrstice, ki imajo na začetku »rjavo«.

$ awk '/ ^ rjava /' vzorec.txt

Kaj pa najti nekaj na koncu vrstice? Naslednji ukaz bo natisnil vse vrstice, ki imajo na koncu »hitro«.

$ awk '/ quick $ /' vzorec.txt

Vzorec wild card

Naslednji primer bo prikazal uporabo karete (.). Tu sta lahko pred znakom "e" katera koli dva znaka.

$ awk '/ ... e /' vzorec.txt

Vzorec wild card (z zvezdico)

Kaj pa, če je na lokaciji lahko poljubno število znakov? Če se želite ujemati z morebitnimi znaki na položaju, uporabite zvezdico (*). Tu se bo AWK ujemala z vsemi vrsticami, ki imajo poljubno število znakov za ".

$ awk '/ vzorec * /'.txt

Izraz oklepaja

Naslednji primer bo predstavil, kako uporabiti izraz oklepajev. Izraz oklepaja pove, da bo na lokaciji ujemanje veljavno, če se ujema z naborom znakov, zajetimi v oklepajih. Naslednji ukaz se bo na primer ujemal z “The” in “Tee” kot veljavni ujemi.

$ awk '/ T [he] e /' vzorec.txt

V regularnem izrazu je nekaj vnaprej določenih naborov znakov. Nabor vseh velikih črk je na primer označen kot "A-Z". V naslednjem ukazu se bo awk ujemal z vsemi besedami, ki vsebujejo veliko črko.

$ awk '/ [A-Z] /' vzorec.txt

Oglejte si naslednjo uporabo naborov znakov z izrazom v oklepajih.

  • [0-9]: Označuje enoštevilko
  • [a-z]: Označuje eno samo malo črko
  • [A-Z]: Označuje eno samo veliko črko
  • [a-zA-z]: Označuje eno črko
  • [a-zA-z 0-9]: Označuje en znak ali številko.

Awk vnaprej definirane spremenljivke

AWK ima veliko vnaprej določenih in samodejnih spremenljivk. Te spremenljivke lahko olajšajo pisanje programov in skriptov z AWK.

Tu je nekaj najpogostejših spremenljivk AWK, na katere boste naleteli.

  • IME DATOTEKE: Ime datoteke trenutne vhodne datoteke.
  • RS: Ločilo zapisov. Zaradi narave AWK obdeluje podatke en zapis naenkrat. Tu ta spremenljivka določa ločilo, ki se uporablja za razdelitev podatkovnega toka na zapise. Ta vrednost je privzeto znak nove vrstice.
  • NR: Trenutna številka vhodnega zapisa. Če je vrednost RS nastavljena na privzeto, bo ta vrednost označevala trenutno številko vhodne vrstice.
  • FS / OFS: Znaki, uporabljeni kot ločilo polja. Po branju zapis AWK razdeli na različna polja. Ločilo je določeno z vrednostjo FS. Pri tiskanju se AWK ponovno pridruži vsem poljem. Vendar trenutno AWK namesto separatorja FS uporablja ločevalnik OFS. Na splošno sta tako FS kot OFS enaka, vendar nista obvezna.
  • NF: Število polj v trenutnem zapisu. Če je uporabljena privzeta vrednost »presledek«, se bo ujemala s številom besed v trenutnem zapisu.
  • ORS: Ločilo zapisov za izhodne podatke. Privzeta vrednost je znak nove vrstice.

Preverimo jih v akciji. Naslednji ukaz bo uporabil spremenljivko NR za tiskanje vrstice 2 do vrstice 4 iz vzorca.txt. AWK podpira tudi logične operaterje, kot sta logični in (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Če želite spremenljivki AWK dodeliti določeno vrednost, uporabite naslednjo strukturo.

$ awk '// ; ; ' =,

Če želite na primer odstraniti vse prazne vrstice iz vhodne datoteke, spremenite vrednost RS v bistvu na nič. To je trik, ki uporablja nejasno pravilo POSIX. Določa, da če je vrednost RS prazen niz, so zapisi ločeni z zaporedjem, ki je sestavljeno iz nove vrstice z eno ali več praznimi vrsticami. V POSIX-u je prazna vrstica brez vsebine popolnoma prazna. Če pa vrstica vsebuje presledke, se ne šteje za "prazno".

$ awk 'print' RS = "vzorec.txt

Dodatni viri

AWK je močno orodje s številnimi funkcijami. Čeprav jih ta vodnik zajema veliko, so to še vedno samo osnove. Obvladovanje AWK bo trajalo več kot le to. Ta priročnik naj bo lep uvod v orodje.

Če res želite obvladati orodje, si oglejte nekaj dodatnih virov, ki jih morate preveriti.

  • Obrežite presledek
  • Uporaba pogojnega stavka
  • Natisnite vrsto stolpcev
  • Regex z AWK
  • 20 primerov AWK

Internet je zelo dober kraj, da se česa naučite. Obstaja veliko odličnih vadnic o osnovah AWK za zelo napredne uporabnike.

Končna misel

Upajmo, da je ta vodnik pomagal dobro razumeti osnove AWK. Čeprav lahko traja nekaj časa, je obvladovanje AWK izjemno koristno z vidika moči, ki jo daje.

Srečno računalništvo!

Vulkan za uporabnike Linuxa
Z vsako novo generacijo grafičnih kart vidimo, da razvijalci iger premikajo meje grafične zvestobe in se približujejo fotorealizmu. A kljub vsem kredi...
OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...
Vadnica za OpenTTD
OpenTTD je ena izmed najbolj priljubljenih poslovnih simulacijskih iger. V tej igri morate ustvariti čudovit prevozniški posel. Vendar boste začeli na...