- Skannaa tiedostot rivi riviltä.
- Jaa kukin rivi kenttiin / sarakkeisiin.
- Määritä kuviot ja vertaa tiedoston rivejä näihin kuvioihin
- Suorita erilaisia toimintoja viivoille, jotka vastaavat tiettyä mallia
Tässä artikkelissa selitämme awk-komennon peruskäytön ja miten sitä voidaan käyttää merkkijonotiedoston jakamiseen. Olemme esittäneet tämän artikkelin esimerkkejä Debian 10 Buster -järjestelmässä, mutta ne voidaan helposti kopioida useimmissa Linux-distroissa.
Käytettävä esimerkkitiedosto
Merkkijonotiedosto, jota käytämme osoittamaan awk-komennon käytön, on seuraava:
Tämän näytetiedoston kukin sarake osoittaa:
- Ensimmäinen sarake sisältää koulun työntekijöiden / opettajien nimet
- Toinen sarake sisältää aiheen, jota työntekijä opettaa
- Kolmas sarake osoittaa, onko työntekijä professori vai apulaisprofessori
- Neljäs sarake sisältää työntekijän palkan
Esimerkki 1: Käytä Awk-näppäintä tiedoston kaikkien rivien tulostamiseen
Määritetyn tiedoston jokaisen rivin tulostaminen on awk-komennon oletuskäyttäytyminen. Seuraavassa awk-komennon syntaksissa emme määritä mitään mallia, jonka awk pitäisi tulostaa, joten komennon on tarkoitus soveltaa "tulosta" -toimintoa tiedoston kaikkiin riveihin.
Syntaksi:
$ awk 'print' tiedostonimi.txtEsimerkki:
Tässä esimerkissä käsken awk-komentoa tulostamaan näytetiedostoni sisältö rivi riviltä.
$ awk 'print' näyte_tiedosto.txt
Esimerkki 2: Käytä awk-painiketta tulostaaksesi vain tietyn mallin mukaiset viivat
Awk: llä voit määrittää kuvion ja komento tulostaa vain kyseistä mallia vastaavat rivit.
Syntaksi:
$ awk '/ pattern_to_be_matched / print' tiedostonimi.txtEsimerkki:
Jos haluan tulostaa näytetiedostosta vain muuttujan 'B' sisältävät rivit, voin käyttää seuraavaa komentoa:
$ awk '/ B / print' näyte_tiedosto.txt
Jotta esimerkki olisi mielekäs, anna minun tulostaa vain professoreita koskevat tiedot.
$ awk '/ professor / print' näyte_tiedosto.txt
Komento tulostaa vain rivit / merkinnät, jotka sisältävät merkkijonon "professori", joten meillä on arvosta enemmän tietoa.
Esimerkki 3. Käytä tiedostoa awk jakamaan tiedosto siten, että vain tietyt kentät / sarakkeet tulostetaan
Koko tiedoston tulostamisen sijaan voit tehdä awk: n tulostamaan vain tietyt tiedoston sarakkeet. Awk käsittelee kaikkia rivillä sanoja, erotettu välilyönneillä, oletusarvoisesti saraketietueena. Se tallentaa tietueen $ N -muuttujaan. Jos $ 1 edustaa ensimmäistä sanaa, $ 2 tallentaa toisen sanan, $ 3 neljännen ja niin edelleen. $ 0 tallentaa koko rivin, joten kuka rivi tulostetaan, kuten esimerkissä 1 selitetään.
Syntaksi:
$ awk 'tulosta $ N,… .' Tiedoston nimi.txtEsimerkki:
Seuraava komento tulostaa vain esimerkkitiedostoni ensimmäisen sarakkeen (nimen) ja toisen sarakkeen (aiheen):
$ awk 'print $ 1, $ 2' näyte_tiedosto.txt
Esimerkki 4: Käytä Awk-näppäintä laskeaksesi ja tulostaaksesi linjojen määrän, joihin kuvio vastaa
Voit kertoa awk: lle laskemaan rivien lukumäärä, joissa määritetty kuvio sovitetaan, ja antamaan sitten `` count ''.
Syntaksi:
$ awk '/ pattern_to_be_matched / ++ cnt END tulosta "Count =", cnt'Tiedoston nimi.txt
Esimerkki:
Tässä esimerkissä haluan laskea niiden henkilöiden määrän, jotka opettavat aihetta "englanti". Siksi sanon awk-komennon vastaamaan kuviota "englanti" ja tulostamaan rivien lukumäärä, joissa tämä malli on sovitettu.
$ awk '/ english / ++ cnt END tulosta "Count =", cnt' näyte_tiedosto.txt
Laskenta viittaa siihen, että 2 henkilöä opettaa englantia näytetiedostotiedoista.
Esimerkki 5: Käytä awk-näppäintä tulostaaksesi vain rivit, joissa on enemmän kuin tietty määrä merkkejä
Tässä tehtävässä käytämme sisäänrakennettua awk-toimintoa nimeltä "pituus". Tämä toiminto palauttaa syötemerkkijonon pituuden. Jos siis haluamme, että awk tulostaa vain merkkejä enemmän tai jopa vähemmän merkkejä, voimme käyttää pituusfunktiota seuraavalla tavalla:
Jos haluat tulostaa viivoja, joiden merkit ovat suurempia kuin numero:
$ awk 'length ($ 0)> n' tiedostonimi.txtJos haluat tulostaa viivoja, joiden merkit ovat pienempiä kuin numero:
$ awk 'pituus ($ 0) < n' filename.txtMissä n on riville määritettävien merkkien määrä.
Esimerkki:
Seuraava komento tulostaa vain rivit näytetiedostostani, joissa on yli 30 merkkiä:
$ awk 'pituus ($ 0)> 30' näyte_tiedosto.txt
Esimerkki 6: Käytä komentoa awk tallentaaksesi komentotuloksen toiseen tiedostoon
Käyttämällä uudelleenohjausoperaattoria '>', voit käyttää awk-komentoa tulostaaksesi lähdön toiseen tiedostoon. Näin voit käyttää sitä:
$ awk 'terms_to_print "tiedostonimi.txt> outputfile.txtEsimerkki:
Tässä esimerkissä käytän uudelleenohjausoperaattoria awk-komennolla vain työntekijöiden nimien (sarake 1) tulostamiseen uuteen tiedostoon:
$ awk 'print $ 1' näyte_tiedosto.txt> työntekijän_nimet.txt
Vahvistin kissakomennoilla, että uusi tiedosto sisältää vain työntekijöiden nimet.
Esimerkki 7: Käytä awk-näppäintä tulostaaksesi tiedostosta vain ei-tyhjät rivit
Awkissa on joitain sisäänrakennettuja komentoja, joiden avulla voit suodattaa lähdön. Esimerkiksi NF-komentoa käytetään pitämään kenttien lukumäärä nykyisessä syötetietueessa. Tällöin NF-komennolla tulostetaan vain tiedoston tyhjät rivit:
$ awk 'NF> 0' näyte_tiedosto.txtVoit tietysti käyttää seuraavaa komentoa tyhjien rivien tulostamiseen:
$ awk 'NF < 0' sample_file.txtEsimerkki 8: Käytä tiedostoa awk laskeaksesi rivien kokonaismäärä tiedostossa
Toinen sisäänrakennettu toiminto, jota kutsutaan NR: ksi, laskee tietyn tiedoston syötetietueiden (yleensä rivien) määrän. Voit käyttää tätä toimintoa awk-tiedostossa seuraavasti laskeaksesi rivien määrän tiedostossa:
$ awk 'END tulosta NR' näyte_tiedosto.txt
Nämä olivat perustiedot, jotka sinun on aloitettava tiedostojen jakamisesta awk-komennolla. Voit hakea näiden esimerkkien yhdistelmällä merkityksellistä tietoa merkkijonotiedostostasi awk: n kautta.