Kaip naudoti „awk“ komandą „Linux“.

Fatmawati Achmad Zaenuri / „Shutterstock“.



„Linux“ sistemoje |_+_| yra komandinės eilutės teksto manipuliavimo dinamas, taip pat galinga scenarijų kalba. Štai įvadas į kai kurias šauniausias jo funkcijas.

SUSIJĘS: 10 pagrindinių Linux komandų pradedantiesiems



Kaip awk gavo savo pavadinimą

|_+_| komanda buvo pavadinta naudojant trijų žmonių, kurie parašė pradinę versiją 1977 m., inicialus: Alfredas Aho , Piteris Veinbergeris , ir Brianas Kernighanas . Šie trys vyrai buvo iš legendinės AT&T „Bell Laboratories“. Unix panteonas. Nuo to laiko prisidėjo daugelis kitų |_+_| toliau vystėsi.

Tai visa scenarijų kalba, taip pat visas komandinės eilutės teksto manipuliavimo įrankių rinkinys. Jei šis straipsnis sužadina jūsų apetitą, galite patikrinkite kiekvieną detalę apie |_+_| ir jo funkcionalumas.



Taisyklės, šablonai ir veiksmai

|_+_| veikia su programomis, kuriose yra taisyklių, sudarytų iš šablonų ir veiksmų. Veiksmas atliekamas tekstu, kuris atitinka šabloną. Raštai yra uždengti garbanotomis petnešomis (|_+_|). Modelis ir veiksmas kartu sudaro taisyklę. Visas |_+_| programa yra kabutėse (|_+_|).

Pažvelkime į paprasčiausią |_+_| tipą programa. Jame nėra rašto, todėl jis atitinka kiekvieną į jį įvestą teksto eilutę. Tai reiškia, kad veiksmas vykdomas kiekvienoje eilutėje. mes naudokite jį išvestyje iš |_+_| komandą.

Štai standartinė išvestis iš |_+_|:



awk

Skelbimas

Galbūt mums nereikia visos šios informacijos, o tiesiog norime matyti vardus paskyrose. Galime išvestis iš |_+_| į |_+_|, tada pasakykite |_+_| spausdinti tik pirmąjį lauką.

Pagal numatytuosius nustatymus |_+_| mano, kad laukas yra simbolių eilutė, apsupta tarpo, eilutės pradžios arba eilutės pabaigos. Laukai identifikuojami pagal dolerio ženklą (|_+_|) ir skaičių. Taigi, |_+_| reiškia pirmąjį lauką, kurį naudosime su |_+_| veiksmas pirmam laukui spausdinti.

Įrašome taip:

awk

|_+_| išspausdina pirmąjį lauką ir atmeta likusią eilutę.

Galime spausdinti tiek laukų, kiek norime. Jei kaip skyriklį pridėsime kablelį, |_+_| spausdina tarpą tarp kiekvieno lauko.

Įvedami taip, kad būtų atspausdintas laikas, kai asmuo prisijungė (ketvirtas laukas):

awk

Yra keletas specialių lauko identifikatorių. Tai reiškia visą teksto eilutę ir paskutinį teksto eilutės lauką:

    0 USD: vaizduoja visą teksto eilutę. 1 USD: reiškia pirmąjį lauką. 2 USD: reiškia antrą lauką. 7 USD: reiškia septintą lauką. 45 USD: reiškia 45 lauką. $NF: reiškia laukų skaičių ir reiškia paskutinį lauką.
Skelbimas

Įvessime toliau pateiktą tekstą, kad būtų pateiktas nedidelis tekstinis failas, kuriame yra trumpa citata Dennisas Ritchie :

awk

Mes norime |_+_| spausdinti pirmąjį, antrąjį ir paskutinį citatos laukelius. Atminkite, kad nors jis yra apvyniotas terminalo lange, tai tik viena teksto eilutė.

Įrašome šią komandą:

awk

Mes nežinome to paprastumo. yra 18-as laukas teksto eilutėje, ir mums tai nerūpi. Mes žinome, kad tai paskutinis laukas ir galime naudoti |_+_| gauti jo vertę. Laikotarpis tiesiog laikomas dar vienu lauko kūno simboliu.

Išvesties laukų skyriklių pridėjimas

Taip pat galite pasakyti |_+_| spausdinti tam tikrą simbolį tarp laukų vietoj numatytojo tarpo simbolio. Numatytoji išvestis iš |_+_| komanda yra šiek tiek savotiška nes laikas nukrenta pačiame jo viduryje. Tačiau galime įvesti šiuos žodžius ir naudoti |_+_| norėdami išgauti norimus laukus:

{} awk

Naudosime |_+_| (išvesties lauko skyriklis) kintamasis, skirtas skirti skirtuką tarp mėnesio, dienos ir metų. Atminkite, kad toliau komandą pateikiame pavienėmis kabutėmis (|_+_|), o ne riestiniais skliaustais (|_+_|):

' awk

BEGIN ir END taisyklės

A |_+_| taisyklė vykdoma vieną kartą prieš pradedant bet kokį teksto apdorojimą. Tiesą sakant, jis vykdomas anksčiau nei |_+_| net skaito bet kokį tekstą. |_+_| taisyklė vykdoma po to, kai baigiamas visas apdorojimas. Galite turėti kelis |_+_| ir |_+_| taisykles, ir jie bus vykdomi eilės tvarka.

Skelbimas

Mūsų pavyzdys |_+_| taisyklę, išspausdinsime visą citatą iš |_+_| failą, kurį anksčiau naudojome su pavadinimu virš jo.

Norėdami tai padaryti, įveskite šią komandą:

who

Atkreipkite dėmesį į |_+_| taisyklė turi savo veiksmų rinkinį, įtrauktą į savo garbanotų skliaustų rinkinį (|_+_|).

Tą pačią techniką galime naudoti su komanda, kurią anksčiau naudojome išvesdami iš |_+_| į |_+_|. Norėdami tai padaryti, įvedame šiuos žodžius:

who

Įvesties laukų skyrikliai

Jei norite |_+_| Norėdami dirbti su tekstu, kuriame laukams atskirti nenaudojami tarpai, turite nurodyti, kuris simbolis tekste naudojamas kaip lauko skyriklis. Pavyzdžiui, |_+_| failas naudoja dvitaškį (|_+_|), kad atskirtų laukus.

Naudosime tą failą ir |_+_| (skyriklio eilutė) parinktis, nurodanti |_+_| norėdami naudoti dvitaškį (|_+_|) kaip skyriklį. Įvedame toliau pateiktą informaciją, kad pasakytume |_+_| norėdami atspausdinti vartotojo abonemento pavadinimą ir namų aplanką:

who

Išvestyje yra vartotojo abonemento pavadinimas (arba programos arba demono pavadinimas) ir namų aplankas (arba programos vieta).

Raštų pridėjimas

Jei mus domina tik įprastos vartotojų paskyros, spausdindami galime įtraukti šabloną, kad išfiltruotume visus kitus įrašus. Nes Vartotojo ID skaičiai yra lygūs arba didesni nei 1000, mes galime pagrįsti savo filtrą šia informacija.

Skelbimas

Norėdami atlikti spausdinimo veiksmą, įvedame toliau pateiktą informaciją tik tada, kai trečiajame lauke (|_+_|) yra 1 000 arba didesnė reikšmė:

awk

Šablonas turi būti iš karto prieš veiksmą, su kuriuo jis susietas.

Galime naudoti |_+_| Taisyklė, suteikianti mūsų mažos ataskaitos pavadinimą. Naudodami (|_+_|) žymėjimą įvedame taip, kad į pavadinimo eilutę įterptume naujos eilutės simbolį:

awk

Raštai yra visaverčiai reguliarios išraiškos , ir jie yra viena iš |_+_| šlovės.

Tarkime, kad norime matyti visuotinai unikalius prijungtų failų sistemų identifikatorius (UUID). Jei ieškosime per |_+_| failą dėl eilutės UUID atvejų, ji turėtų grąžinti šią informaciją mums.

Komandoje naudojame paieškos šabloną /UUID/:

awk

Skelbimas

Jis suranda visus UUID atvejus ir išspausdina tas eilutes. Iš tikrųjų būtume gavę tą patį rezultatą be |_+_| veiksmas, nes numatytasis veiksmas spausdina visą teksto eilutę. Tačiau aiškumo dėlei dažnai naudinga būti aiškiai išreikštam. Kai peržiūrėsite scenarijų arba istorijos failą, džiaugsitės, kad palikote užuominų sau.

Pirmoji rasta eilutė buvo komentaro eilutė ir nors UUID eilutė yra jos viduryje, |_+_| vis tiek rado. Galime pakoreguoti reguliariąją išraišką ir pasakyti |_+_| apdoroti tik eilutes, kurios prasideda UUID. Norėdami tai padaryti, įvedame toliau pateiktą informaciją, kuri apima eilutės pradžią (|_+_|):

$

Taip geriau! Dabar matome tik originalias montavimo instrukcijas. Norėdami dar labiau patikslinti išvestį, įvedame toliau pateiktą informaciją ir apribojame rodymą iki pirmojo lauko:

Jei šiame kompiuteryje būtų įdiegtos kelios failų sistemos, gautume tvarkingą jų UUID lentelę.

Integruotos funkcijos

|_+_| turi daug funkcijų, kurias galite iškviesti ir naudoti savo programose , tiek iš komandinės eilutės, tiek scenarijuose. Jei šiek tiek kasinsite, tai bus labai vaisinga.

Norėdami parodyti bendrąją funkcijos iškvietimo techniką, pažvelgsime į keletą skaitinių. Pavyzdžiui, taip spausdinama kvadratinė šaknis iš 625:

printSkelbimas

Ši komanda išspausdina 0 (nulio) ir -1 (tai yra matematinė konstanta, pi) arctangentą:

awk

Šioje komandoje modifikuojame |_+_| rezultatą funkcija prieš spausdinant:

awk

Funkcijos gali priimti išraiškas kaip parametrus. Pavyzdžiui, čia yra sudėtingas būdas paprašyti kvadratinės šaknies iš 25:

awk

awk scenarijai

Jei komandų eilutė tampa sudėtinga arba sukuriate rutiną, kurią norėsite naudoti dar kartą, galite perkelti savo |_+_| komandą į scenarijų.

Savo pavyzdiniame scenarijuje atliksime visus šiuos veiksmus:

  • Nurodykite apvalkalui, kurį vykdomąjį failą naudoti scenarijui paleisti.
  • Paruoškite |_+_| naudoti |_+_| laukų skyriklio kintamasis, skirtas skaityti įvesties tekstą, kai laukai atskirti dvitaškiais (|_+_|).
  • Naudokite |_+_| išvesties lauko skyriklis, nurodantis |_+_| naudoti dvitaškius (|_+_|), kad atskirtumėte laukus išvestyje.
  • Nustatykite skaitiklį į 0 (nulis).
  • Kiekvienos teksto eilutės antrame lauke nustatykite tuščią reikšmę (tai visada yra x, todėl mums nereikia jo matyti).
  • Spausdinkite eilutę su pakeistu antruoju lauku.
  • Padidinkite skaitiklį.
  • Išspausdinkite skaitiklio vertę.

Mūsų scenarijus parodytas žemiau.

Awk scenarijaus pavyzdys redaktoriuje.

|_+_| taisyklė atlieka parengiamuosius veiksmus, o |_+_| taisyklė rodo skaitiklio reikšmę. Vidurinė taisyklė (kuri neturi nei pavadinimo, nei šablono, todėl atitinka kiekvieną eilutę) pakeičia antrąjį lauką, atspausdina eilutę ir padidina skaitiklį.

Skelbimas

Pirmoji scenarijaus eilutė nurodo apvalkalui, kurį vykdomąjį failą naudoti (mūsų pavyzdyje |_+_|), kad paleistumėte scenarijų. Jis taip pat praeina |_+_| (failo pavadinimas) parinktį |_+_|, kuri praneša, kad tekstas, kurį jis ketina apdoroti, bus iš failo. Kai paleisime scenarijų, perduosime failo pavadinimą.

Toliau pateiktą scenarijų įtraukėme kaip tekstą, kad galėtumėte iškirpti ir įklijuoti:

$NF

Išsaugokite tai faile pavadinimu |_+_|. Į padarykite scenarijų vykdomą Ir , įvedami |_+_|:

awk

Dabar mes jį paleisime ir išlaikysime |_+_| failą į scenarijų. Tai failas |_+_| apdoros už mus pagal scenarijaus taisykles:

date

Failas apdorojamas ir rodoma kiekviena eilutė, kaip parodyta toliau.

Skelbimas

Antrojo lauko x įrašai buvo pašalinti, tačiau atkreipkite dėmesį, kad laukų skyrikliai vis dar yra. Eilutės suskaičiuojamos, o bendra suma pateikiama išvesties apačioje.

awk Netinka nepatogiai

|_+_| nereiškia nepatogumo; tai reiškia eleganciją. Jis apibūdintas kaip apdorojimo filtras ir ataskaitų rengėjas. Tiksliau, tai abu šie arba, tiksliau, įrankis, kurį galite naudoti abiem šioms užduotims atlikti. Vos keliose eilutėse, |_+_| pasiekia tai, kas reikalauja plataus kodavimo tradicine kalba.

Šią galią išnaudoja paprasta taisyklių koncepcija, kurioje yra šablonų, parenkamas apdorotas tekstas ir apdorojimą apibrėžiantys veiksmai.

Linux komandos
Failai deguto · pv · katė · tac · chmod · sukibimas · skirt · sed · Su · vyras · pastūmėtas · popd · fsck · testinis diskas · sek · fd · pandoc · CD · $PATH · awk · prisijungti · jq · sulankstyti · unikalus · Journalctl · uodega · valstybė · ls · fstab · išmetė · mažiau · chgrp · chown · rev · žiūrėk · stygos · tipo · pervadinti · užtrauktukas · išpakuokite · kalnas · umount · diegti · fdisk · mkfs · rm · rmdir · rsync · df · gpg · mes · nano · mkdir · · ln · pleistras · Paversti · rclone · susmulkinti · SRM
Procesai slapyvardis · ekranas · viršuje · malonu · renicija · progresas · trasa · sistema · tmux · chsh · istorija · adresu · partija · Laisvas · kurios · dmesg · usermod · ps · chroot · xargs · tty · rausvas · lsof · vmstat · laikas baigėsi · siena · taip · nužudyti · miegoti · sudo · jo · laikas · sugrupuoti · usermod · grupėse · lshw · išjungti · paleisti iš naujo · sustabdyti · išjungti · passwd · lscpu · crontab · data · bg · fg
Tinklo kūrimas netstat · ping · traceroute · ip · ss · Kas yra · fail2ban · bmon · tu · pirštu · nmap · ftp · garbanoti · wget · PSO · kas aš esu · Į · iptables · ssh-keygen · ufw

SUSIJĘS: Geriausi Linux nešiojamieji kompiuteriai kūrėjams ir entuziastams

SKAITYTI KITAS Dave Dave'as McKay'us
Dave'as McKay'us pirmą kartą naudojo kompiuterius, kai buvo madinga perforuoto popieriaus juosta, ir nuo tada jis programuoja. Daugiau nei 30 metų IT pramonėje jis dabar yra visą darbo dieną dirbantis technologijų žurnalistas. Per savo karjerą jis dirbo laisvai samdomu programuotoju, tarptautinės programinės įrangos kūrimo komandos vadovu, IT paslaugų projektų vadovu, o pastaruoju metu – duomenų apsaugos pareigūnu. Jo raštą paskelbė howtogeek.com, cloudsavvyit.com, itenterpriser.com ir opensource.com. Dave'as yra Linux evangelistas ir atvirojo kodo advokatas.
Skaityti visą biografiją

Įdomios Straipsniai