A.W.K.

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. július 3-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .
A.W.K.
Nyelvóra scripted , procedurális , adatvezérelt
Megjelent 1977
Szerző Alfred Aho , Peter Weinberger és Brian Kernighan
Fejlesztő Alfred Aho , Brian Kernigan és Peter Weinberger [d]
Kiadás POSIX.1-2017
Típusrendszer Nem
Főbb megvalósítások awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (fordító), Awka (fordító)
Dialektusok régi awk oawk 1977, új awk nawk 1985, GNU Awk gawk
Befolyásolva C , SNOBOL 4, Bourne shell
befolyásolta Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua
 Médiafájlok a Wikimedia Commons oldalon

Az AWK  egy C - szerű szkriptnyelv egy bemeneti adatfolyam (például szövegfájl) soronkénti elemzésére és feldolgozására adott minták ( reguláris kifejezések ) szerint . Használható parancssori szkriptekben .

Az AWK név a nyelv fejlesztőinek - Aho , Weinberger ( eng.  Peter J. Weinberger ) és Kernighan - nevének kezdőbetűiből áll . Az első verziót 1977 - ben írta az AT &T Bell Laboratories .

Programstruktúra

Az AWK a bemeneti adatfolyamot bejegyzések listájaként kezeli. Minden bejegyzés mezőkre van osztva. Ezen információk alapján a programozó által meghatározott feldolgozási algoritmus végrehajtásra kerül. Alapértelmezés szerint a rekordelválasztó egy újsor karakter (vagyis a rekordok megegyeznek a sorokkal), a mezőelválasztó szóköz vagy tabulátor karakter, vagy ilyen karakterek sorozata. Az elválasztó karakterek kifejezetten definiálhatók a programban. A mezőelválasztó karakter a parancssorban is megadható.

Egy AWK program olyan utasításokból (szabályokból) áll, amelyek így néznek ki:

template { action } template { action } ...

Az egyes bejegyzéseket sorra összehasonlítja az összes mintával, és minden alkalommal, amikor megfelel a mintának, a megadott művelet végrehajtásra kerül. Ha a sablon nincs megadva, akkor a művelet bármely bejegyzésnél végrehajtódik. Ha nincs megadva művelet , akkor a bejegyzés megjelenik. Az AWK 2 előre definiált BEGIN és END sablonnal is rendelkezik . A BEGIN parancsot a bemeneti adatfolyam feldolgozása előtt hajtják végre. END - a bemeneti adatfolyam utolsó rekordjának feldolgozása után.

Egy művelet állhat pontosvesszővel, újsorral vagy záró zárójellel elválasztott utasítások sorozatából.

Nyelvi konstrukciók

Feltételek

if ( feltétel ) then { 1. műveletlista } else { 2. műveletlista } _ _

Ciklusok

do do { Loop body } while ( feltétel ) míg while ( feltétel ){ Loop body } for (index űrlap)

A for ciklus az indextömbök feldolgozására orientált formában így néz ki:

for ( inicializálási szakasz ; feltétel szakasz ; frissítési iterátor szakasz ){ Loop body } for (asszociatív forma)

A for ciklus asszociatív tömbök feldolgozására orientált formában így néz ki:

for ( iterátor a tömbben ){ Loop body }

Beépített változók

Változó Tartalom Alapértelmezett érték
ARGC Parancssori argumentumok száma -
ARGV Parancssori argumentumok tömbje -
KÖRNYEZET Массив, содержащий переменные окружения -
FÁJL NÉV Feldolgozott bemeneti fájl -
FNR Rekordszám az aktuális fájlban -
FS Mezőelválasztó rögzítése a bemeneten szóköz(ek) és/vagy tabulátorok
NF Az aktuális rekord mezőinek száma -
NR Rekordszám (az olvasott rekordok teljes száma) -
OFMT Számnyomtatási formátum %.6g
OFS Kimeneti rekord mezőelválasztó (karakter) szóköz(ek) és/vagy tabulátorok
ORS Rekordelválasztó az AWK program kimenetén (karakter) \0
RS Bemeneti rekordelválasztó (karakter) \0
RSTART A függvény által talált részkarakterlánc kezdetének pozíciójamatch -
HOSSZÚ A függvény által talált részkarakterlánc hosszamatch -
SUBSEP Indexelválasztó többdimenziós tömbökben \034

Beépített funkciók

Példák

Helló világ! »

BEGIN { print "Hello World!" ; kilépés }

A leghosszabb sor hosszának kinyomtatása:

{ if ( hossz ( 0 USD ) > max ) max = hossz ( 0 USD ) } VÉGE { max . nyomtatás }

Nyomtasson minden 80 karakternél hosszabb sort:

{ if ( hossz ( 0 $ ) > 80 ) print $ 0 }

Nyomtasson minden olyan sort, amely legalább egy mezőt tartalmaz:

NF > 0

A sorok számának kinyomtatása egy fájlban:

VÉGE { print NR }

Olyan sorok nyomtatása, amelyek száma 3 többszöröse:

{ if ( FNR % 3 == 0 ) print $ 0 }

Nyomtassa ki a beviteli sor fennmaradó részét az első három mező után:

{ # keresse meg a 4. mező elejét... egyezés ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...print the remainder of the input string from the found position print substr ( $ 0 , 1 + RLENGTH ) }

Linkek