Hoe om AWK opdragte en skrifte te skryf

Opdragte, sintaksis en voorbeelde

Die awk-opdrag is 'n kragtige metode om tekstlêers te verwerk of te analiseer, veral datalêers wat deur reëls (rye) en kolomme georganiseer word.

Eenvoudige awk- opdragte kan vanaf die opdraglyn uitgevoer word . Meer komplekse take moet geskryf word as awk programme (sogenaamde awk scripts) na 'n lêer.

Die basiese formaat van 'n awk-opdrag lyk soos volg:

awk 'patroon {action}' invoer-lêer> uitvoer-lêer

Dit beteken: neem elke reël van die insetlêer; As die lyn die patroon bevat, pas die aksie aan die lyn toe en skryf die gevolgde lyn na die uitsetlêer. As die patroon weggelaat word, word die aksie toegepas op alle reëls. Byvoorbeeld:

awk '(druk $ 5}' table1.txt> output1.txt

Hierdie stelling neem die element van die 5de kolom van elke reël en skryf dit as 'n lyn in die uitvoerlêer "output.txt". Die veranderlike '$ 4' verwys na die tweede kolom. Net so kan jy toegang verkry tot die eerste, tweede en derde kolom, met $ 1, $ 2, $ 3, ens. Standaard word veronderstel dat kolomme geskei word deur spasies of tabs (witspasie). Dus, as die insetlêer "table1.txt" hierdie lyne bevat:

1, Justin Timberlake, Titel 545, Prys $ 7,30 2, Taylor Swift, Titel 723, Prys $ 7.90 3, Mick Jagger, Titel 610, Prys $ 7.90 4, Lady Gaga, Titel 118, Prys $ 7.30 5, Johnny Cash, Titel 482, Prys $ 6.50 6, Elvis Presley, Titel 335, Prys $ 7,30 7, John Lennon, Titel 271, Prys $ 7.90 8, Michael Jackson, Titel 373, Prys $ 5.50

Dan sal die opdrag die volgende lyne skryf na die uitvoerlêer "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

As die kolomskeider iets anders as spasies of tabs is, soos 'n komma, kan jy dit in die akwiese stelling as volg spesifiseer:

awk -F, '{print $ 3}' table1.txt> output1.txt

Dit sal die element uit kolom 3 van elke reël kies as die kolomme as geskei deur 'n komma beskou word. Daarom sal die uitset, in hierdie geval, wees:

Titel 545 Titel 723 Titel 610 Titel 118 Titel 482 Titel 335 Titel 271 Titel 373

Die lys van stellings binne die krullerige hakies ('{', '}') word 'n blok genoem. As u 'n voorwaardelike uitdrukking voor 'n blok plaas, sal die stelling in die blok slegs uitgevoer word as die toestand waar is.

awk '$ 7 == "\ $ 7.30" {druk $ 3}' table1.txt

In hierdie geval is die voorwaarde $ 7 == "\ $ 7.30", wat beteken dat die element in kolom 7 gelyk is aan $ 7,30. Die terugslag in die voorkant van die dollarteken word gebruik om te verhoed dat die stelsel $ 7 as 'n veranderlike interpreteer en in plaas daarvan die dollar teken letterlik neem.

So druk hierdie onstuimige verklaring die element uit by die 3de kolom van elke reël wat 'n $ 7,30 by kolom 7 het.

U kan ook gereelde uitdrukkings as die toestand gebruik. Byvoorbeeld:

awk '/ 30 / {print $ 3}' table1.txt

Die snaar tussen die twee snystrepe ('/') is die gereelde uitdrukking. In hierdie geval is dit net die tou "30." Dit beteken dat as 'n lyn die string "30" bevat, die stelsel die element in die 3de kolom van die lyn druk. Die uitset in die bostaande voorbeeld sal wees:

Timberlake, Gaga, Presley,

As die tabel elemente nommers is, kan berekenings op hulle uitgevoer word soos in hierdie voorbeeld:

awk '(druk ($ 2 * $ 3) + $ 7}'

Behalwe die veranderlikes wat toegang tot die elemente van die huidige ry ($ 1, $ 2, ens.) Is, is die veranderlike $ 0 wat verwys na die volledige ry (lyn) en die veranderlike NF wat aan die aantal velde hou.

U kan ook nuwe veranderlikes definieer soos in hierdie voorbeeld:

awk '(som = 0; vir (col = 1; kol <= NF; col ++) som + = $ col; druk som; } '

Dit bereken en druk die som van al die elemente van elke ry.

Awk-stellings word gereeld gekombineer met sed-opdragte .