Ahoj

Ako rozdeliť súbor reťazcov s AWK

Ako rozdeliť súbor reťazcov s AWK
Príkaz Linux awk (skrátený od mien vývojárov; Aho, Weinberger a Kernighan) je skvelý spôsob, ako spracovať a analyzovať súbor reťazcov. Aby boli súbory informatívnejšie, musia byť usporiadané do riadkov a stĺpcov. Potom môžete v týchto súboroch použiť awk na:

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:

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.TXT

Prí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.TXT

Prí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.TXT

Prí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.TXT

Pre tlač riadkov so znakmi menšími ako počet:

Dĺžka $ awk '($ 0) < n' filename.txt

Kde 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.TXT

Prí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.TXT

Je zrejmé, že na vytlačenie prázdnych riadkov môžete použiť nasledujúci príkaz:

$ awk 'NF < 0' sample_file.txt

Prí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.

Hry Zadarmo a open source herné motory pre vývoj hier pre Linux
Zadarmo a open source herné motory pre vývoj hier pre Linux
Tento článok sa bude zaoberať zoznamom bezplatných a otvorených herných nástrojov, ktoré možno použiť na vývoj 2D a 3D hier v systéme Linux. Existuje ...
Hry Výukový program Shadow of the Tomb Raider pre Linux
Výukový program Shadow of the Tomb Raider pre Linux
Shadow of the Tomb Raider je dvanásty prírastok do série Tomb Raider - franšíza akčných adventúr vytvorená Eidosom Montrealom. Túto hru prijali kritic...
Hry Ako zvýšiť rýchlosť FPS v systéme Linux?
Ako zvýšiť rýchlosť FPS v systéme Linux?
FPS znamená Počet snímok za sekundu. Úlohou FPS je merať snímkovú frekvenciu pri prehrávaní videa alebo herných výkonoch. Jednoducho povedané, počet n...