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 .
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.
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 }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 |
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 > 0A 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 ) }Unix parancsok | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Programozási nyelvek | |
---|---|
|