Awk

Kaip naudoti AWK „Linux“

Kaip naudoti AWK „Linux“

„Linux“ siūlomos komunalinės paslaugos dažnai atitinka UNIX dizaino filosofiją. Bet koks įrankis turėtų būti mažas, įvesties / išvesties naudokite paprastą tekstą ir veikti moduliniu būdu. Dėl palikimo turime keletą geriausių teksto apdorojimo funkcijų, naudodami tokias priemones kaip „sed“ ir „awk“.

„Linux“ sistemoje „awk“ įrankis yra iš anksto įdiegtas visuose „Linux“ distrofuose. Pati AWK yra programavimo kalba. AWK įrankis yra tik AWK programavimo kalbos vertėjas. Šiame vadove patikrinkite, kaip naudoti „AWK“ sistemoje „Linux“.

AWK naudojimas

AWK įrankis yra naudingiausias, kai tekstai yra išdėstyti nuspėjamu formatu. Tai gana gerai analizuoti ir manipuliuoti lentelės duomenimis. Jis veikia eilutėmis po visą tekstinį failą.

Numatytasis awk elgesys yra tarpų naudojimas (tarpai, skirtukai ir kt.).) laukams atskirti. Laimei, daugelis „Linux“ konfigūracijos failų laikosi šio modelio.

Pagrindinė sintaksė

Taip atrodo „awk“ komandų struktūra.

$ awk '// ; ;

Komandos dalys gana savaime suprantamos. Awk gali veikti be paieškos ar veiksmo dalies. Jei nieko nenurodyta, numatytasis rungtynių veiksmas bus tiesiog spausdinimas. Iš esmės „awk“ atspausdins visas rastas faile esančias rungtynes.

Jei nenurodytas paieškos šablonas, tada „awk“ atliks nurodytus veiksmus kiekvienoje failo eilutėje.

Jei pateikiamos abi dalys, tada „awk“ naudos modelį, kad nustatytų, ar dabartinė linija jį atspindi. Jei sutampa, tada „awk“ atlieka nurodytą veiksmą.

Atminkite, kad „awk“ taip pat gali dirbti su peradresuotais tekstais. Tai galima pasiekti pateikiant komandos turinį, kad jis veiktų. Sužinokite daugiau apie „Linux pipe“ komandą.

Demonstraciniais tikslais pateikiame teksto failo pavyzdį. Joje yra 10 eilučių, po 2 žodžius vienoje eilutėje.

$ katės pavyzdys.txt

Įprasta išraiška

Viena iš pagrindinių funkcijų, dėl kurių „awk“ yra galingas įrankis, yra reguliariosios išraiškos palaikymas (trumpai tariant „regex“). Reguliarioji išraiška yra eilutė, vaizduojanti tam tikrą simbolių modelį.

Štai keletas dažniausiai pasitaikančių reguliariojo reiškinio sintaksių sąrašas. Šios regex sintaksės yra būdingos ne tik „awk“. Tai yra beveik visuotinės regex sintaksės, todėl jų įsisavinimas taip pat padės kitose programose / programavimuose, kurie apima reguliarią išraišką.

  • Pagrindiniai simboliai: Visi raidiniai ir skaitiniai simboliai pabraukia (_) ir kt.
    • Simbolių rinkinys: kad viskas būtų lengviau, regexe yra simbolių grupės. Pvz., Didžiosios (A-Z), mažosios (a-z) ir skaitiniai skaitmenys (0–9).
  • Metaženklai: Tai simboliai, paaiškinantys įvairius būdus išplėsti įprastus simbolius.
    • Laikotarpis (.): Bet kokia simbolio atitiktis pozicijoje galioja (išskyrus naują eilutę).
    • Žvaigždutė (*): Galioja nulis ar daugiau tiesioginio simbolio egzistavimo prieš jį.
    • Laikiklis ([]): Atitikimas galioja, jei vietoje yra kuris nors iš skliausteliuose esančių simbolių. Ją galima derinti su simbolių rinkiniais.
    • Laikinasis elementas (^): Rungtynės turės būti eilutės pradžioje.
    • Doleris (USD): Rungtynės turės būti eilutės gale.
    • Atgalinis brūkšnys (\): Jei bet kurį metaženklą reikia naudoti tiesiogine prasme.

Teksto spausdinimas

Norėdami atsispausdinti visą teksto failo turinį, naudokite komandą spausdinti. Paieškos šablono atveju šablonas nėra apibrėžtas. Taigi, awk išspausdina visas eilutes.

$ awk 'print' pavyzdys.txt

Čia „print“ yra AWK komanda, spausdinanti įvesties turinį.

Styginių paieška

AWK gali atlikti pagrindinę teksto paiešką pagal pateiktą tekstą. Šablono skiltyje jis turi būti tekstas, kurį reikia rasti.

Šioje komandoje „awk“ ieškos teksto „greitai“ visose failo pavyzdžio eilutėse.txt.

$ awk '/ quick /' pavyzdys.txt

Dabar naudokime keletą reguliarių posakių, kad galėtume tiksliau sureguliuoti paiešką. Ši komanda išspausdins visas eilutes, kurių pradžioje yra „ruda“.

$ awk '/ ^ brown /' mėginys.txt

Kaip rasti ką nors eilutės gale? Ši komanda išspausdins visas eilutes, kurių pabaigoje yra „greita“.

$ awk '/ quick $ /' pavyzdys.txt

Laukinės kortos raštas

Kitas pavyzdys bus parodyti naudojimąsi caret (.). Čia gali būti bet kokie du simboliai prieš simbolį „e“.

$ awk '/… e /' pavyzdys.txt

Laukinių kortelių raštas (naudojant žvaigždutę)

Ką daryti, jei toje vietoje gali būti bet koks simbolių skaičius? Norėdami suderinti bet kokį galimą simbolį, naudokite žvaigždutę (*). Čia AWK atitiks visas eilutes, turinčias bet kokį simbolių skaičių po „the“.

$ awk '/ the * /' mėginys.txt

Laikiklio išraiška

Šis pavyzdys parodys, kaip naudoti skliaustų išraišką. Skliausteliuose išraiška nurodoma, kad toje vietoje atitiktis bus tinkama, jei ji sutaps su skliausteliuose esančiu simbolių rinkiniu. Pavyzdžiui, ši komanda atitiks „The“ ir „Tee“ kaip galiojančias atitiktis.

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

Reguliariojoje išraiškoje yra keletas iš anksto apibrėžtų simbolių rinkinių. Pvz., Visų didžiųjų raidžių rinkinys pažymėtas kaip „A – Z“. Šioje komandoje „awk“ atitiks visus žodžius, kuriuose yra didžioji raidė.

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

Pažvelkite į toliau nurodytą simbolių rinkinių su skliaustų išraiška naudojimą.

  • [0-9]: nurodo vieną skaitmenį
  • [a-z]: nurodo vieną mažąją raidę
  • [A-Z]: nurodo vieną didelę raidę
  • [a-zA-z]: nurodo vieną raidę
  • [a-zA-z 0-9]: nurodo vieną simbolį ar skaitmenį.

Awk iš anksto nustatyti kintamieji

AWK pateikiama su daugybe iš anksto nustatytų ir automatinių kintamųjų. Šie kintamieji gali palengvinti programų ir scenarijų rašymą naudojant AWK.

Štai keletas dažniausiai pasitaikančių AWK kintamųjų, su kuriais susidursite.

  • FAILO PAVADINIMAS: Dabartinio įvesties failo failo pavadinimas.
  • RS: Įrašų skyriklis. Dėl AWK pobūdžio jis apdoroja duomenis po vieną įrašą. Čia šis kintamasis nurodo ribotuvą, naudojamą duomenų srautui padalyti į įrašus. Pagal numatytuosius nustatymus ši vertė yra naujos eilutės simbolis.
  • NR: Dabartinis įvesties įrašo numeris. Jei RS reikšmė nustatyta kaip numatytoji, ši vertė nurodys dabartinį įvesties eilutės numerį.
  • FS / OFS: Simbolis (-iai), naudojamas (-i) kaip lauko skyriklis. Perskaitytas AWK padalija įrašą į skirtingus laukus. Atskiriklis apibrėžiamas pagal FS vertę. Spausdinant AWK vėl sujungia visus laukus. Tačiau šiuo metu AWK vietoj FS separatoriaus naudoja OFS separatorių. Paprastai tiek FS, tiek OFS yra vienodi, tačiau nėra privalomi.
  • NF: Laukų skaičius dabartiniame įraše. Jei naudojama numatytoji reikšmė „tarpai“, ji atitiks dabartiniame įraše esančių žodžių skaičių.
  • ORS: Išvesties duomenų įrašų skyriklis. Numatytoji vertė yra naujos eilutės simbolis.

Patikrinkime juos veikdami. Ši komanda naudos kintamąjį NR, kad atspausdintų 2 eilutę nuo 4 pavyzdžio eilutės.txt. AWK taip pat palaiko loginius operatorius, tokius kaip loginiai ir (&&).

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

Norėdami priskirti konkrečią vertę AWK kintamajam, naudokite šią struktūrą.

$ awk '// ; ; =,

Pavyzdžiui, jei norite pašalinti visas tuščias eilutes iš įvesties failo, pakeiskite RS reikšmę iš esmės nieko. Tai gudrybė, kurioje naudojama neaiški POSIX taisyklė. Jis nurodo, kad jei RS reikšmė yra tuščia eilutė, tada įrašai yra atskirti seka, kurią sudaro nauja eilutė su viena ar daugiau tuščių eilučių. „POSIX“ tuščia eilutė be turinio yra visiškai tuščia. Tačiau jei eilutėje yra tarpų, tai nelaikoma tuščia.

$ awk 'print' RS = "pavyzdys.txt

Papildomi resursai

AWK yra galingas įrankis su daugybe funkcijų. Nors šis vadovas apima daugelį jų, vis tiek tai tik pagrindai. AWK įsisavinimas užtruks ne tik tai. Šis vadovas turėtų būti puikus įrankio įvadas.

Jei tikrai norite įvaldyti įrankį, pateikite keletą papildomų išteklių, kuriuos turėtumėte patikrinti.

  • Apkirpkite tarpą
  • Naudojant sąlyginį teiginį
  • Spausdinkite stulpelių diapazoną
  • Regex su AWK
  • 20 AWK pavyzdžių

Internetas yra gana gera vieta ko nors išmokti. Yra daugybė nuostabių pamokų apie AWK pagrindus labai pažengusiems vartotojams.

Galutinė mintis

Tikimės, kad šis vadovas padėjo gerai suprasti AWK pagrindus. Nors tai gali užtrukti, AWK įvaldymas yra nepaprastai naudingas atsižvelgiant į jo suteikiamą galią.

Laimingo skaičiavimo!

Geriausi „Linux“ žaidimų distristai 2021 m
„Linux“ operacinė sistema nuėjo ilgą kelią nuo originalios, paprastos, serverio išvaizdos. Ši OS pastaraisiais metais nepaprastai patobulėjo ir dabar ...
Kaip užfiksuoti ir perduoti savo žaidimų sesiją sistemoje „Linux“
Anksčiau žaidimai buvo laikomi tik pomėgiu, tačiau laikui bėgant lošimų pramonė labai augo technologijų ir žaidėjų skaičiaus atžvilgiu. Žaidimų audito...
Geriausi žaidimai, kuriuos reikia žaisti naudojant rankos stebėjimą
„Oculus Quest“ neseniai pristatė puikią rankos stebėjimo be valdiklių idėją. „Oculus Quest“ rankų sekimo žaidimai iki šiol buvo ribojami, kai žaidimų ...