A.W.K. | |
---|---|
Kieliluokka | käsikirjoitettu , menettelyllinen , dataohjattu |
Esiintyi | 1977 |
Tekijä | Alfred Aho , Peter Weinberger ja Brian Kernighan |
Kehittäjä | Alfred Aho , Brian Kernigan ja Peter Weinberger [d] |
Vapauta | POSIX.1-2017 |
Tyyppijärjestelmä | Ei |
Tärkeimmät toteutukset | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (kääntäjä), Awka (kääntäjä) |
Murteet | vanha awk oawk 1977, uusi awk nawk 1985, GNU Awk gawk |
Vaikutettu | C , SNOBOL 4, Bourne-kuori |
vaikutti | Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua |
Mediatiedostot Wikimedia Commonsissa |
AWK on C :n kaltainen komentosarjakieli syötevirran (esimerkiksi tekstitiedoston) rivi riviltä jäsentämiseen ja käsittelyyn annettujen mallien ( säännölliset lausekkeet ) mukaisesti. Voidaan käyttää komentorivin komentosarjoissa .
Nimi AWK koostuu kielen kehittäjien - Aho , Weinberger ( eng. Peter J. Weinberger ) ja Kernighan - nimien ensimmäisistä kirjaimista . Ensimmäinen versio kirjoitettiin vuonna 1977 AT &T Bell Laboratoriesissa .
AWK käsittelee syöttövirtaa merkintöjen luettelona. Jokainen merkintä on jaettu kenttiin. Näiden tietojen perusteella suoritetaan jokin ohjelmoijan määrittelemä käsittelyalgoritmi. Oletuksena tietueen erotin on rivinvaihtomerkki (eli tietueet ovat samat kuin rivit), kentän erotin on välilyönti tai sarkainmerkki tai tällaisten merkkien sarja. Erotinmerkit voidaan määritellä erikseen ohjelmassa. Kentän erotinmerkki voidaan määrittää myös komentorivillä.
AWK-ohjelma koostuu lauseista (säännöistä), jotka näyttävät tältä:
malli { toiminta } malli { toiminta } ...Jokaista merkintää verrataan vuorollaan kaikkiin kuvioihin, ja joka kerta, kun se vastaa kuviota, suoritetaan määritetty toiminto. Jos mallia ei ole määritetty, toiminto suoritetaan mille tahansa merkinnälle. Jos toimintoa ei ole määritetty , merkintä näytetään. AWK:ssa on myös 2 ennalta määritettyä mallia BEGIN ja END . BEGIN suoritetaan ennen kuin syöttövirta käsitellään. END - syöttövirran viimeisen tietueen käsittelyn jälkeen.
Toiminto voi koostua lausesarjasta, jotka on erotettu puolipisteellä, rivinvaihdolla tai sulkevilla suluilla.
For-silmukka, joka on suunnattu käsittelemään indeksitaulukoita , näyttää tältä:
for ( alustusosio ; ehtoosio ; päivitä iteraattoriosio ) { Loop body } _ _ for (assosiatiivinen muoto)For-silmukka assosiatiivisten taulukoiden käsittelyyn suunnatussa muodossa näyttää tältä:
for ( iteraattori taulukossa ) { Loop body }Muuttuva | Sisältö | Oletusarvo |
---|---|---|
ARGC | Komentoriviargumenttien määrä | - |
ARGV | Joukko komentoriviargumentteja | - |
YMPÄRISTÖ | Ympäristömuuttujia sisältävä taulukko | - |
TIEDOSTON NIMI | Käsitelty syöttötiedosto | - |
FNR | Tietueen numero nykyisessä tiedostossa | - |
FS | Tallenna kentän erotin syötteeseen | välilyönnit ja/tai sarkaimet |
NF | Nykyisen tietueen kenttien lukumäärä | - |
NR | Tietueen numero (luettujen tietueiden kokonaismäärä) | - |
OFMT | Numeroiden tulosteen muoto | %.6g |
OFS | Lähtötietueen kentän erotin (merkki) | välilyönnit ja/tai sarkaimet |
ORS | Tallenteen erotin AWK-ohjelman ulostulossa (merkki) | \0 |
RS | Syötä tietueen erotin (merkki) | \0 |
RSTART | Funktion löytämän osamerkkijonon alun sijaintimatch | - |
PITUUS | Funktion löytämän osamerkkijonon pituusmatch | - |
SUBSEP | Indeksierotin moniulotteisissa taulukoissa | \034 |
Hei maailma! »
ALOITA { tulosta "Hei maailma!" ; poistu }Pisimmän rivin pituuden tulostaminen:
{ if ( pituus ( 0 dollaria ) > max ) max = pituus ( 0 dollaria ) } END { tulosta maksimi }Tulosta kaikki yli 80 merkkiä pitkät rivit:
{ if ( pituus ( 0 dollaria ) > 80 ) tulosta 0 dollaria }Tulosta kaikki rivit, joissa on vähintään yksi kenttä:
NF > 0Tiedoston rivien määrän tulostaminen:
LOPPU { tulosta NR }Tulostusrivit, joiden numerot ovat 3:n kerrannaisia:
{ if ( FNR % 3 == 0 ) tulosta 0 $ }Tulosta syöttörivin loppuosa kolmen ensimmäisen kentän jälkeen:
{ # etsi 4. kentän alku... haku ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...tulostaa loppuosa syöttömerkkijonosta löydetystä paikasta print substr ( $ 0 , 1 + PITUU ) }Unix-komennot | ||||||||
---|---|---|---|---|---|---|---|---|
|
Ohjelmointikielet | |
---|---|
|