- Skannige faile rea kaupa.
- Jagage iga rida väljadeks / veergudeks.
- Määrake mustrid ja võrrelge faili ridu nende mustritega
- Sooritage joontele erinevaid toiminguid, mis sobivad antud mustriga
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:
- Esimene veerg sisaldab kooli töötajate / õpetajate nimesid
- Teises veerus on aine, mida töötaja õpetab
- Kolmas veerg näitab, kas töötaja on professor või dotsent
- Neljas veerg sisaldab töötaja töötasu
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.txtNä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.txtNä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.txtNä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.txtRidade printimiseks, mille tähemärgid on väiksemad kui number:
$ awk 'pikkus ($ 0) < n' filename.txtKus 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.txtNä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.txtIlmselt võite tühjade ridade printimiseks kasutada järgmist käsku:
$ awk 'NF < 0' sample_file.txtNä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.