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ą:
- 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ę.
- & rsaquo; Kaip naudoti „whois“ komandą „Linux“.
- › 5 svetainės, kurias turėtų pažymėti kiekvienas „Linux“ vartotojas
- › Kaip rasti „Spotify“ supakuotą 2021 m
- › Kompiuterio aplankas yra 40: kaip „Xerox Star“ sukūrė darbalaukį
- › „Microsoft Excel“ funkcijos ir formulės: koks skirtumas?
- & rsaquo; 2021 m. kibernetinis pirmadienis: geriausi techniniai pasiūlymai
- & rsaquo; 2021 m. kibernetinis pirmadienis: geriausi „Apple“ pasiūlymai
Į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.
SkelbimasMū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.
SkelbimasNorė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:
print
Skelbimas Š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:
Mūsų scenarijus parodytas žemiau.
|_+_| 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į.
SkelbimasPirmoji 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.
SUSIJĘS: Geriausi Linux nešiojamieji kompiuteriai kūrėjams ir entuziastams
SKAITYTI KITASDave'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ą