- Skenujte súbory, riadok po riadku.
- Každý riadok rozdeľte na polia / stĺpce.
- Zadajte vzory a porovnajte riadky súboru s týmito vzormi
- Vykonajte rôzne akcie na líniách, ktoré zodpovedajú danému vzoru
V tomto článku vysvetlíme základné použitie príkazu awk a ako sa dá použiť na rozdelenie súboru reťazcov. Príklady z tohto článku sme uskutočnili na systéme Debian 10 Buster, ale dajú sa ľahko replikovať na väčšine linuxových distribúcií.
Ukážkový súbor, ktorý použijeme
Vzorový súbor reťazcov, ktorý použijeme na demonštráciu použitia príkazu awk, je nasledovný:
To naznačuje každý stĺpec vzorového súboru:
- Prvý stĺpec obsahuje mená zamestnancov / učiteľov v škole
- Druhý stĺpec obsahuje predmet, ktorý zamestnanec učí
- Tretí stĺpec označuje, či je zamestnanec profesor alebo odborný asistent
- Štvrtý stĺpec obsahuje mzdu zamestnanca
Príklad 1: Pomocou aplikácie Awk vytlačíte všetky riadky súboru
Tlač každého riadku zadaného súboru je predvoleným správaním príkazu awk. V nasledujúcej syntaxi príkazu awk nešpecifikujeme žiadny vzor, ktorý by awk mal vytlačiť, takže príkaz má použiť akciu „tlačiť“ na všetky riadky súboru.
Syntax:
$ awk 'print' názov súboru.TXTPríklad:
V tomto príklade hovorím príkazu awk, aby vytlačil obsah môjho vzorového súboru riadok po riadku.
$ awk 'print' sample_file.TXT
Príklad 2: Použite awk na tlač iba riadkov, ktoré zodpovedajú danému vzoru
Pomocou awk môžete určiť vzor a príkaz vytlačí iba riadky zodpovedajúce danému vzoru.
Syntax:
$ awk '/ pattern_to_be_matched / print' názov súboru.TXTPríklad:
Ak zo vzorového súboru chcem vytlačiť iba riadky, ktoré obsahujú premennú „B“, môžem použiť nasledujúci príkaz:
$ awk '/ B / print' sample_file.TXT
Aby bol príklad zmysluplnejší, dovoľte mi vytlačiť iba informácie o zamestnancoch, ktorí sú „profesormi“.
$ awk '/ professor / print' sample_file.TXT
Príkaz vytlačí iba riadky / položky, ktoré obsahujú reťazec „professor“, takže z údajov máme k dispozícii cennejšie informácie.
Príklad 3. Pomocou awk rozdeľte súbor tak, aby sa tlačili iba konkrétne polia / stĺpce
Namiesto toho, aby ste vytlačili celý súbor, môžete urobiť, aby awk vytlačil iba konkrétne stĺpce súboru. Aplikácia Awk predvolene považuje všetky slová oddelené bielymi medzerami v riadku za záznam v stĺpci. Ukladá záznam v premennej $ N. Ak $ 1 predstavuje prvé slovo, $ 2 ukladá druhé slovo, $ 3 štvrté atď. $ 0 ukladá celý riadok, aby sa vytlačil riadok who, ako je vysvetlené v príklade 1.
Syntax:
$ awk 'tlačiť $ N,… .' názov súboru.TXTPríklad:
Nasledujúci príkaz vytlačí iba prvý stĺpec (meno) a druhý stĺpec (predmet) môjho vzorového súboru:
$ awk 'print $ 1, $ 2' sample_file.TXT
Príklad 4: Pomocou aplikácie Awk spočítajte a vytlačte počet riadkov, v ktorých sa vzor zhoduje
Môžete povedať awk, aby spočítal počet riadkov, v ktorých sa zhoduje zadaný vzor, a potom vygenerovať tento 'počet'.
Syntax:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'názov súboru.TXT
Príklad:
V tomto príklade chcem spočítať počet osôb učiacich predmet „angličtina“. Preto poviem príkazu awk, aby sa zhodoval so vzorom „english“ a vytlačil počet riadkov, v ktorých je tento vzor zhodný.
$ awk '/ english / ++ cnt END print "Count =", cnt' sample_file.TXT
Počet tu naznačuje, že 2 ľudia učia angličtinu zo záznamov vzorových súborov.
Príklad 5: Použite awk na tlač iba riadkov s viac ako konkrétnym počtom znakov
Pri tejto úlohe budeme používať vstavanú funkciu awk s názvom „dĺžka“. Táto funkcia vráti dĺžku vstupného reťazca. Ak teda chceme, aby awk tlačil iba riadky s väčším alebo dokonca menším počtom znakov, môžeme funkciu dĺžka použiť nasledujúcim spôsobom:
Pre tlač riadkov so znakmi väčšími ako číslo:
$ awk 'dĺžka ($ 0)> n' názov súboru.TXTPre tlač riadkov so znakmi menšími ako počet:
Dĺžka $ awk '($ 0) < n' filename.txtKde n je počet znakov, ktoré chcete určiť pre riadok.
Príklad:
Nasledujúci príkaz vytlačí iba riadky z môjho vzorového súboru, ktoré majú znaky viac ako 30:
$ awk 'dĺžka ($ 0)> 30' sample_file.TXT
Príklad 6: Použite awk na uloženie výstupu príkazu do iného súboru
Pomocou operátora presmerovania „>“ môžete pomocou príkazu awk vytlačiť jeho výstup do iného súboru. Takto ho môžete použiť:
názov súboru $ awk 'criteria_to_print ".txt> výstupný súbor.TXTPríklad:
V tomto príklade použijem operátor presmerovania pomocou môjho príkazu awk na vytlačenie iba mien zamestnancov (stĺpec 1) do nového súboru:
$ awk 'print $ 1' sample_file.txt> zamestnanec_mena.TXT
Pomocou príkazov mačky som overil, že nový súbor obsahuje iba mená zamestnancov.
Príklad 7: Použite awk na tlač iba neprázdnych riadkov zo súboru
Awk má niektoré vstavané príkazy, ktoré môžete použiť na filtrovanie výstupu. Napríklad príkaz NF sa používa na udržanie počtu polí v aktuálnom vstupnom zázname. Tu použijeme príkaz NF na vytlačenie iba neprázdnych riadkov súboru:
$ awk 'NF> 0' sample_file.TXTJe zrejmé, že na vytlačenie prázdnych riadkov môžete použiť nasledujúci príkaz:
$ awk 'NF < 0' sample_file.txtPríklad 8: Použite awk na spočítanie celkového počtu riadkov v súbore
Ďalšia zabudovaná funkcia s názvom NR udržuje počet vstupných záznamov (zvyčajne riadkov) daného súboru. Túto funkciu môžete v awk použiť na výpočet počtu riadkov v súbore nasledujúcim spôsobom:
$ awk 'END print NR' sample_file.TXT
To boli základné informácie, ktoré musíte začať s rozdelením súborov pomocou príkazu awk. Kombináciu týchto príkladov môžete použiť na načítanie zmysluplnejších informácií z vášho súboru reťazcov pomocou awk.