A.W.K.

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 3. heinäkuuta 2022 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .
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 .

Ohjelman rakenne

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.

Kielirakenteet

Ehdot

if ( ehto ) then { Action list 1 } else { Action list 2 }

Pyörät

tee do { Loop body } while ( ehto ) kun while ( ehto ){ Loop body } for (hakemistolomake)

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 }

Sisäänrakennetut muuttujat

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

Sisäänrakennetut toiminnot

Esimerkkejä

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 > 0

Tiedoston 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 ) }

Linkit