Ärme

Stringifaili jagamine Awkiga

Stringifaili jagamine Awkiga
Linuxi awk-käsk (lühendatud arendajate nimedest; Aho, Weinberger ja Kernighan) on suurepärane viis stringifaili töötlemiseks ja analüüsimiseks. Selleks, et failid oleksid informatiivsemad, tuleb need korraldada ridade ja veergude kujul. Seejärel saate nende failide awk-d kasutada:

Selles artiklis selgitame käsu awk põhikasutust ja seda, kuidas seda saab kasutada stringide faili jagamiseks. Oleme selle artikli näited esitanud Debiani 10 Busteri süsteemis, kuid neid saab hõlpsasti kopeerida enamikus Linuxi distros.

Kasutatav näidisfail

Stringide näidisfail, mida kasutame käsu awk kasutamise demonstreerimiseks, on järgmine:

Seda näitab näidisfaili iga veerg:

Näide 1: faili kõigi ridade printimiseks kasutage Awki

Määratud faili iga rea ​​printimine on käsu awk vaikekäitumine. Järgnevas käsu awk süntaksis ei määra me ühtegi mustrit, mille awk peaks printima, seega peaks käsk rakendama toimingut "print" faili kõikidele ridadele.

Süntaks:

$ awk 'print' failinimi.txt

Näide:

Selles näites käskin käsuga awk printida näidisfaili sisu rida-realt.

$ awk 'print' näidisfail.txt

Näide 2: Kasutage awk, et printida ainult jooned, mis sobivad antud mustriga

Rakendusega awk saate määrata mustri ja käsk prindib ainult sellele mustrile vastavad read.

Süntaks:

$ awk '/ pattern_to_be_matched / print' failinimi.txt

Näide:

Kui ma tahan näidisfailist printida ainult rida (d), mis sisaldab muutujat B, saan kasutada järgmist käsku:

$ awk '/ B / print' näidisfail.txt

Näite sisukamaks muutmiseks lubage mul printida ainult teave töötajate kohta, kes on professorid.

$ awk '/ professor / print' näidisfail.txt

Käsk prindib ainult read / kirjed, mis sisaldavad stringi “professor”, seega on meil andmetest rohkem väärtuslikku teavet.

Näide 3. Kasutage faili awk jagamiseks nii, et prinditakse ainult kindlad väljad / veerud

Kogu faili printimise asemel saate awk-faili printida ainult faili konkreetsete veergude printimiseks. Awk käsitleb kõiki rea tühikuga eraldatud sõnu vaikimisi veerukirjena. See salvestab kirje muutujaks $ N. Kui $ 1 tähistab esimest sõna, siis $ 2 salvestab teise sõna, $ 3 neljanda jne. $ 0 salvestab kogu rea, nii et rida kes trükitakse, nagu on selgitatud näites 1.

Süntaks:

$ awk 'print $ N,… .' faili nimi.txt

Näide:

Järgmine käsk prindib minu näidisfaili ainult esimese veeru (nimi) ja teise veeru (teema):

$ awk 'print $ 1, $ 2' sample_file.txt

Näide 4: Kasutage Awki, et loendada ja printida joonte arv, milles muster sobib

Võite öelda awk-le, et ta loendaks nende mustrite arvu, milles määratud muster sobitub, ja väljastaks seejärel selle 'loenduse'.

Süntaks:

$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'
faili nimi.txt

Näide:

Selles näites tahan loendada inimeste arvu, kes õpetavad ainet inglise keeles. Seetõttu ütlen käsule awk, et see sobiks mustriga “inglise keel”, ja printin välja nende ridade arvu, milles see muster sobib.

$ awk '/ english / ++ cnt END print "Count =", cnt' näidisfail.txt

Siin olev loendus viitab sellele, et 2 inimest õpetavad failifailide näidistest inglise keelt.

Näide 5: Kasutage klahvi awk ainult selliste ridade printimiseks, millel on rohkem kui kindel tähemärk

Selle ülesande jaoks kasutame sisseehitatud awk-funktsiooni nimega “pikkus”. See funktsioon tagastab sisendstringi pikkuse. Seega, kui tahame, et awk printiks ainult ridu, mille märkide arv on suurem või isegi väiksem, saame pikkuse funktsiooni kasutada järgmiselt:

Ridade printimiseks, mille tähemärk on suurem kui number:

$ awk 'length ($ 0)> n' failinimi.txt

Ridade printimiseks, mille tähemärgid on väiksemad kui number:

$ awk 'pikkus ($ 0) < n' filename.txt

Kus n on tähemärkide arv, mille soovite rea jaoks määrata.

Näide:

Järgmine käsk prindib minu näidisfailist ainult read, millel on rohkem kui 30 tähemärki:

$ awk 'pikkus ($ 0)> 30' näidisfail.txt

Näide 6: käsu väljundi salvestamiseks teise faili kasutage klahvi awk

Kasutades ümbersuunamisoperaatorit '>', saate käsu awk abil väljundi teise faili printida. Nii saate seda kasutada:

$ awk 'criteria_to_print "failinimi.txt> outputfile.txt

Näide:

Selles näites kasutan oma awk käsuga ümbersuunamisoperaatorit ainult töötajate nimede (1. veerg) printimiseks uude faili:

$ awk 'print $ 1' näidisfail.txt> töötaja_nimed.txt

Kontrollisin kassi käskude kaudu, et uus fail sisaldab ainult töötajate nimesid.

Näide 7: Kasutage faili awk printimiseks failist ainult tühje ridu

Awkil on mõned sisseehitatud käsud, mida saate kasutada väljundi filtreerimiseks. Näiteks käsku NF kasutatakse praeguses sisendkirjes olevate väljade loendamiseks. Siin kasutame käsku NF ainult faili mittetühjade ridade printimiseks:

$ awk 'NF> 0' näidisfail.txt

Ilmselt võite tühjade ridade printimiseks kasutada järgmist käsku:

$ awk 'NF < 0' sample_file.txt

Näide 8: faili ridade koguarvude arvutamiseks kasutage klahvi awk

Teine sisseehitatud funktsioon nimega NR arvestab antud faili sisendkirjete (tavaliselt ridade) arvu. Faili ridade arvu lugemiseks saate seda funktsiooni kasutada awk-s järgmiselt:

$ awk 'END print NR' näidisfail.txt

See oli põhiteave, mida peate alustama failide jagamisega käsuga awk. Nende näidete kombinatsiooni abil saate stringide failist awk kaudu sisukamat teavet hankida.

Hiire vasakklõps nupp ei tööta Windows 10-s
Kui kasutate oma sülearvuti või lauaarvutiga spetsiaalset hiirt, kuid hiire vasakklõps nupp ei tööta mingil põhjusel operatsioonisüsteemis Windows 10/...
Kursor hüppab või liigub juhuslikult Windows 10-s kirjutamise ajal
Kui leiate, et hiire kursor hüppab või liigub Windowsi sülearvutisse või arvutisse kirjutades automaatselt, juhuslikult, võivad mõned neist soovituste...
Kuidas muuta hiire ja puuteplaatide kerimise suund Windows 10-s ümber
Hiir ja PuuteplaatNeed muudavad arvutamise mitte ainult lihtsaks, vaid ka tõhusamaks ja vähem aeganõudvaks. Me ei kujuta ette elu ilma nende seadmetet...